@page "/blockchains"

<h1>Blockchain</h1>

<p>
    @namespace HyperCube.Models
    @code
        {
        string hidecontr = "hidden";
        string hidereceipt = "hidden";        
        string result = "";
    }

    @if (Blockchain.newData)
    {
        @foreach (var bc in Blockchain.loaded)
        {
        <p><b>@bc.url:@bc.port</b>, address: @bc.address</p>
    }
        @bytecode;
    }
    </p>



    <h4>Ethereum dev network</h4>
    <p>
        Add blockchain connection:
        <input name="bcurl" @bind="bcURL" type="text" placeholder="URL" @bind:event="oninput">
        <input name="bport" @bind="bcport" type="number" placeholder="port">
        <button @onclick="GetBlockChain">Connect</button>
    </p>
    <p style="visibility:@hidecontr">
        Add smart contract:
        <button @onclick="AddContract">Add</button>
        <input id="bytecode" size="100" @bind="bytecode" name="bytecode" type="text" placeholder="Smart contract bytecode" @bind:event="oninput">
    <p>
        0x60806040526000805534801561001457600080fd5b50610101806100246000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680635b34b966146058578063a87d942c14606c578063f5c5ad83146094575b600080fd5b348015606357600080fd5b50606a60a8565b005b348015607757600080fd5b50607e60ba565b6040518082815260200191505060405180910390f35b348015609f57600080fd5b5060a660c3565b005b60016000808282540192505081905550565b60008054905090565b600160008082825403925050819055505600a165627a7a723058207815571f5c1d82bff3c0512a4cbc7a1f1c2063fa9a0de61913b76925f041e9ed0029
    </p>
        <br />
    </p>
    <p style="visibility:@hidereceipt">
        Get smart contract address:
        <button @onclick="GetReceipt">Check transaction receipt</button>
        <input id="bytecode" size="100" @bind="bytecode" name="bytecode" type="text" placeholder="Transaction address" @bind:event="oninput">
        <br />
    </p>
    <p>@result</p>

    @code
    {
        private Random r = new Random();
        private string bcURL = "127.0.0.1";
        private int bcport = 8545;
        private string bytecode = "";
        private string error = "";

        private async Task GetReceipt()
        {
            //TODO result as transaction addr
            //result = await Blockchain.loaded[0].GetReceipt(result);
        }

        private async Task AddContract()
        {
            if (Blockchain.loaded.Count > 0)
            {
                var taddr = await Blockchain.loaded[0].AddContract(bytecode);
                if (taddr != "")
                {
                    result = taddr;
                    hidereceipt = "visible";
                    var caddr = await Blockchain.loaded[0].GetReceipt(result);
                    if (caddr != "")
                    {
                        result = caddr;
                    }
                }
            }
            //private Post post = new Post();
        }

        private async Task GetBlockChain()
        {
            if (Blockchain.loaded.Count == 0)
            {
                Blockchain bc = new HyperCube.Models.Blockchain(bcURL, bcport);
                result = await bc.Initialize();
                if (result != "")
                    hidecontr = "visible";
                //bcURL = bc.GetAddress();
                //bc.ExecuteContract();
                //bcURL = bc.address;
                //hidecontr = "hidden";
            }

            //private Post post = new Post();
        }
    }