package transactions

import (
	"crypto/sha256"
	"encoding/hex"
	"fmt"
)

type Transaction struct {
	Type      string  // TRANSFER, STAKE, MINT, etc.
	From      string
	To        string
	Value     float64
	Nonce     uint64
	Gas       uint64
	Signature string
}

// Hash gera um hash SHA256 da transação para identificação única
func (tx *Transaction) Hash() string {
	data := fmt.Sprintf("%s:%s:%f:%d:%d", tx.From, tx.To, tx.Value, tx.Nonce, tx.Gas)
	sum := sha256.Sum256([]byte(data))
	return hex.EncodeToString(sum[:])
}

// IsZero valida se os campos obrigatórios estão presentes
func (tx *Transaction) IsZero() bool {
	return tx.From == "" || tx.To == "" || tx.Value == 0
}