package wrappers

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

type (
	// Block wrapper used for the representation of
	// core.Block / core.BlockBase on the RPC Server.
	Block struct {
		*core.Block
		Confirmations uint32       `json:"confirmations"`
		NextBlockHash util.Uint256 `json:"nextblockhash,omitempty"`
		Hash          util.Uint256 `json:"hash"`
	}
)

// NewBlock creates a new Block wrapper.
func NewBlock(block *core.Block, chain core.Blockchainer) Block {
	blockWrapper := Block{
		Block: block,
		Hash:  block.Hash(),
	}

	hash := chain.GetHeaderHash(int(block.Index) + 1)
	if !hash.Equals(util.Uint256{}) {
		blockWrapper.NextBlockHash = hash
	}

	blockWrapper.Confirmations = chain.BlockHeight() - block.Index - 1
	return blockWrapper
}