package com.tdp.blockexplorer.eth;

import com.tdp.blockexplorer.blockchain.BlockCallback;
import com.tdp.blockexplorer.blockchain.BlockExplorer;

import org.xutils.common.util.LogUtil;
import org.xutils.http.RequestParams;

/**
 * Created by wulijie on 2018/4/11.
 * 以太坊区块浏览方式
 * sort的排序规则
 * HEX String - an integer block number
 * String "earliest" for the earliest/genesis block
 * String "latest" - for the latest mined block
 * String "pending" - for the pending state/transactions
 */
public class EthBlockExplorer extends Eth implements BlockExplorer {
    @Override
    public void getTransactionByHash(String hash, BlockCallback callback) {
        //获取交易根据交易哈希值 示例
        EthParams params =
                new EthParams("eth_getTransactionByHash")
                        .setMethodId(1)
                        .addParams(hash);
        //执行请求
        post(params, callback);
    }


    @Override
    public void getBalance(String address, BlockCallback callback) {
        String sort = "latest";//默认指定吧
        EthParams params = new EthParams("eth_getBalance")
                .setMethodId(1)
                .addParams(address)
                .addParams(sort);//integer block number, or the string "latest", "earliest" or "pending"
        post(params, callback);
    }

    @Override
    public void getTransactionCount(String address, BlockCallback callback) {
        String sort = "latest";//默认指定吧
        EthParams params = new EthParams("eth_getTransactionCount")
                .setMethodId(1)
                .addParams(address)
                .addParams(sort);
        post(params, callback);
    }

    @Override
    public void getBlockByHash(String hash, BlockCallback callback) {
        EthParams params = new EthParams("eth_getBlockByHash")
                .setMethodId(1)
                .addParams(hash)
                .addParams(true);//可选 默认值为false。true会将区块包含的所有交易作为对象返回。否则只返回交易的哈希。
        post(params, callback);
    }


    @Override
    public void getTransactionsByAddress(String address, int page, BlockCallback callback) {
        String url = "http://api.etherscan.io/api";// 分页加载
        RequestParams params = new RequestParams(url);
        params.addQueryStringParameter("module", "account");
        params.addQueryStringParameter("action", "txlist");
        params.addQueryStringParameter("address", address);
        params.addQueryStringParameter("startblock", "0");
        params.addQueryStringParameter("endblock", "99999999");
        params.addQueryStringParameter("page", String.valueOf(page));
        params.addQueryStringParameter("offset", "10");//每页十条信息
        params.addQueryStringParameter("sort", "asc");
        params.addQueryStringParameter("apikey", "YourApiKeyToken");
        LogUtil.e("ETH Url =" + params.getUri());
        get(params, callback);
    }

//    @Override
//    public void getTransactionInfoByTxHash(String txHash, BlockCallback callback) {
//        //(EtherScan上提供的方法)建议配合Ether官方api 使用
//        String url = "http://api.etherscan.io/api";
//        RequestParams params = new RequestParams(url);
//        params.addQueryStringParameter("module", "account");
//        params.addQueryStringParameter("action", "txlistinternal");
//        params.addQueryStringParameter("txhash", txHash);
//        params.addQueryStringParameter("apikey", "YourApiKeyToken");
//        get(params, callback);
//        //http://www.qukuai.com/search/zh-CN/ETH/0x2cb58f20647c1944251b5213c193680537ec1821c572c34f26f93e10357f3ddf/1
//    }


}