@page "/"
@inject IBinanceRestClient binanceClient
@inject IBitfinexRestClient bitfinexClient
@inject IBitgetRestClient bitgetClient
@inject IBittrexRestClient bittrexClient
@inject IBybitRestClient bybitClient
@inject ICoinExRestClient coinexClient
@inject IHuobiRestClient huobiClient
@inject IKrakenRestClient krakenClient
@inject IKucoinRestClient kucoinClient
@inject IOKXRestClient okxClient

<h3>BTC-USD prices:</h3>
@foreach(var price in _prices.OrderBy(p => p.Key))
{
    <div>@price.Key: @price.Value</div>
}

@code{
    private Dictionary<string, decimal> _prices = new Dictionary<string, decimal>();

    protected override async Task OnInitializedAsync()
    {
        var binanceTask = binanceClient.SpotApi.ExchangeData.GetTickerAsync("BTCUSDT");
        var bitfinexTask = bitfinexClient.SpotApi.ExchangeData.GetTickerAsync("tBTCUSD");
        var bitgetTask = bitgetClient.SpotApi.ExchangeData.GetTickerAsync("BTCUSDT_SPBL");
        var bittrexTask = bittrexClient.SpotApi.ExchangeData.GetTickerAsync("BTC-USDT");
        var bybitTask = bybitClient.V5Api.ExchangeData.GetSpotTickersAsync("BTCUSDT");
        var coinexTask = coinexClient.SpotApi.ExchangeData.GetTickerAsync("BTCUSDT");
        var huobiTask = huobiClient.SpotApi.ExchangeData.GetTickerAsync("btcusdt");
        var krakenTask = krakenClient.SpotApi.ExchangeData.GetTickerAsync("XBTUSD");
        var kucoinTask = kucoinClient.SpotApi.ExchangeData.GetTickerAsync("BTC-USDT");
        var okxTask = okxClient.UnifiedApi.ExchangeData.GetTickerAsync("BTCUSDT");

        await Task.WhenAll(binanceTask, bitfinexTask, bittrexTask, bybitTask, coinexTask, huobiTask, krakenTask, kucoinTask);

        if (binanceTask.Result.Success)
            _prices.Add("Binance", binanceTask.Result.Data.LastPrice);

        if (bitfinexTask.Result.Success)
            _prices.Add("Bitfinex", bitfinexTask.Result.Data.LastPrice);

        if (bitgetTask.Result.Success)
            _prices.Add("Bitget", bitgetTask.Result.Data.ClosePrice);

        if (bittrexTask.Result.Success)
            _prices.Add("Bittrex", bittrexTask.Result.Data.LastPrice);

        if (bybitTask.Result.Success)
            _prices.Add("Bybit", bybitTask.Result.Data.List.First().LastPrice);

        if (coinexTask.Result.Success)
            _prices.Add("CoinEx", coinexTask.Result.Data.Ticker.LastPrice);

        if (huobiTask.Result.Success)
            _prices.Add("Huobi", huobiTask.Result.Data.ClosePrice ?? 0);

        if (krakenTask.Result.Success)
            _prices.Add("Kraken", krakenTask.Result.Data.First().Value.LastTrade.Price);

        if (kucoinTask.Result.Success)
            _prices.Add("Kucoin", kucoinTask.Result.Data.LastPrice ?? 0);

        if (okxTask.Result.Success)
            _prices.Add("OKX", okxTask.Result.Data.LastPrice ?? 0);
    }

}