use super::client::KrakenClient;

crate::exchanges::impl_exchange_method_wrappers! {
    KrakenClient;
    public [
        get_futures_instruments(),
        get_futures_kline(product_symbol => "product_symbol", timeframe => "timeframe"),
        get_futures_orderbook(product_symbol => "product_symbol"),
        get_futures_public_trades(product_symbol => "product_symbol"),
        get_futures_tickers(),
        get_server_time(),
        get_spot_asset_pairs(),
        get_spot_kline(product_symbol => "product_symbol"),
        get_spot_orderbook(product_symbol => "product_symbol"),
        get_spot_public_trades(product_symbol => "product_symbol"),
        get_spot_ticker(),
    ];
    private [
        cancel_futures_all_orders(),
        cancel_futures_order(),
        cancel_spot_all_orders(),
        cancel_spot_order(),
        futures_wallet_transfer(amount => "amount", from_account => "fromAccount", to_account => "toAccount", unit => "unit"),
        get_futures_accounts(),
        get_futures_fills(),
        get_futures_open_orders(),
        get_futures_open_positions(),
        get_futures_order_status(),
        get_spot_account_balance(),
        get_spot_closed_orders(),
        get_spot_ledgers(),
        get_spot_open_orders(),
        get_spot_open_positions(),
        get_spot_orders(txid => "txid"),
        get_spot_trade_balance(),
        get_spot_trade_history(),
        get_spot_trade_volume(),
        place_futures_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_futures_limit_order(product_symbol => "product_symbol", side => "side", size => "size", price => "price"),
        place_futures_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_futures_market_buy_order(product_symbol => "product_symbol", size => "size"),
        place_futures_market_order(product_symbol => "product_symbol", side => "side", size => "size"),
        place_futures_market_sell_order(product_symbol => "product_symbol", size => "size"),
        place_futures_order(product_symbol => "product_symbol", side => "side", order_type => "orderType", size => "size"),
        place_futures_post_only_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_futures_post_only_limit_order(product_symbol => "product_symbol", side => "side", size => "size", price => "price"),
        place_futures_post_only_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_spot_limit_buy_order(product_symbol => "product_symbol", volume => "volume", price => "price"),
        place_spot_limit_order(product_symbol => "product_symbol", side => "side", volume => "volume", price => "price"),
        place_spot_limit_sell_order(product_symbol => "product_symbol", volume => "volume", price => "price"),
        place_spot_market_buy_order(product_symbol => "product_symbol", volume => "volume"),
        place_spot_market_order(product_symbol => "product_symbol", side => "side", volume => "volume"),
        place_spot_market_sell_order(product_symbol => "product_symbol", volume => "volume"),
        place_spot_order(product_symbol => "product_symbol", side => "side", ordertype => "ordertype", volume => "volume"),
        place_spot_post_only_limit_buy_order(product_symbol => "product_symbol", volume => "volume", price => "price"),
        place_spot_post_only_limit_order(product_symbol => "product_symbol", side => "side", volume => "volume", price => "price"),
        place_spot_post_only_limit_sell_order(product_symbol => "product_symbol", volume => "volume", price => "price"),
        wallet_transfer_to_futures(asset => "asset", amount => "amount"),
        withdraw_futures_to_spot_wallet(amount => "amount", currency => "currency"),
    ];
}
