/*
 * Copyright (c) 2018 LI Zhennan
 *
 * Use of this work is governed by a MIT License.
 * You may find a license copy in project root.
 */

package etherscan

import (
	"fmt"
	"strconv"
)

// BlockReward gets block and uncle rewards by block number
func (c *Client) BlockReward(blockNum int) (rewards BlockRewards, err error) {
	param := M{
		"blockno": blockNum,
	}

	err = c.call("block", "getblockreward", param, &rewards)
	return
}

// BlockNumber gets the closest block number by UNIX timestamp
//
// valid closest option: before, after
func (c *Client) BlockNumber(timestamp int64, closest string) (blockNumber int, err error) {
	var blockNumberStr string

	param := M{
		"timestamp": strconv.FormatInt(timestamp, 10),
		"closest":   closest,
	}

	err = c.call("block", "getblocknobytime", param, &blockNumberStr)

	if err != nil {
		return
	}

	blockNumber, err = strconv.Atoi(blockNumberStr)
	if err != nil {
		err = fmt.Errorf("parsing block number %q: %w", blockNumberStr, err)
		return
	}

	return
}