// +build gofuzz

package lnwirefuzz

import (
	"bytes"
	"compress/zlib"
	"encoding/binary"

	"github.com/lightningnetwork/lnd/lnwire"
)

// Fuzz_query_short_chan_ids_zlib is used by go-fuzz.
func Fuzz_query_short_chan_ids_zlib(data []byte) int {

	var buf bytes.Buffer
	zlibWriter := zlib.NewWriter(&buf)
	_, err := zlibWriter.Write(data)
	if err != nil {
		// Zlib bug?
		panic(err)
	}

	if err := zlibWriter.Close(); err != nil {
		// Zlib bug?
		panic(err)
	}

	compressedPayload := buf.Bytes()

	chainhash := []byte("00000000000000000000000000000000")
	numBytesInBody := len(compressedPayload) + 1
	zlibByte := []byte("\x01")

	bodyBytes := make([]byte, 2)
	binary.BigEndian.PutUint16(bodyBytes, uint16(numBytesInBody))

	payload := append(chainhash, bodyBytes...)
	payload = append(payload, zlibByte...)
	payload = append(payload, compressedPayload...)

	// Prefix with MsgQueryShortChanIDs.
	payload = prefixWithMsgType(payload, lnwire.MsgQueryShortChanIDs)

	// Create an empty message so that the FuzzHarness func can check
	// if the max payload constraint is violated.
	emptyMsg := lnwire.QueryShortChanIDs{}

	// Pass the message into our general fuzz harness for wire messages!
	return harness(payload, &emptyMsg)
}
