package transaction

import (
	"io"

	"github.com/CityOfZion/neo-go/pkg/util"
)

// Input represents a Transaction input (CoinReference).
type Input struct {
	// The hash of the previous transaction.
	PrevHash util.Uint256 `json:"txid"`

	// The index of the previous transaction.
	PrevIndex uint16 `json:"vout"`
}

// DecodeBinary implements the Payload interface.
func (in *Input) DecodeBinary(r io.Reader) error {
	br := util.BinReader{R: r}
	br.ReadLE(&in.PrevHash)
	br.ReadLE(&in.PrevIndex)
	return br.Err
}

// EncodeBinary implements the Payload interface.
func (in *Input) EncodeBinary(w io.Writer) error {
	bw := util.BinWriter{W: w}
	bw.WriteLE(in.PrevHash)
	bw.WriteLE(in.PrevIndex)
	return bw.Err
}

// Size returns the size in bytes of the Input
func (in Input) Size() int {
	return in.PrevHash.Size() + 2 // 2 = sizeOf uint16
}