package rpc

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

/*
	Definition of types, helper functions and variables
	required for calculation of transaction inputs using
	NeoScan API.
*/

type (
	NeoScanServer struct {
		URL  string // "protocol://host:port/"
		Path string // path to API endpoint without wallet address
	}

	UTXO struct {
		Value util.Fixed8
		TxID  util.Uint256
		N     uint16
	}

	Unspents []UTXO

	// unspent per asset
	Unspent struct {
		Unspent Unspents
		Asset   string      // "NEO" / "GAS"
		Amount  util.Fixed8 // total unspent of this asset
	}

	// struct of NeoScan response to 'get_balance' request
	NeoScanBalance struct {
		Balance []*Unspent
		Address string
	}
)

// NeoScan returns asset IDs as strings ("NEO"/"GAS");
// strings might be converted to uint256 assets IDs using this map
var GlobalAssets = map[string]string{
	"c56f33fc6ecfcd0c225c4ab356fee59390af8560be0e930faebe74a6daff7c9b": "NEO",
	"602c79718b16e442de58778e148d0b1084e3b2dffd5de6b7b16cee7969282de7": "GAS",
}

// functions for sorting array of `Unspents`
func (us Unspents) Len() int           { return len(us) }
func (us Unspents) Less(i, j int) bool { return us[i].Value < us[j].Value }
func (us Unspents) Swap(i, j int)      { us[i], us[j] = us[j], us[i] }