use super::client::KucoinClient;

crate::exchanges::impl_exchange_method_wrappers! {
    KucoinClient;
    public [
        get_futures_contract(product_symbol => "product_symbol"),
        get_futures_contracts(),
        get_futures_kline(product_symbol => "product_symbol", timeframe => "timeframe"),
        get_futures_open_interest(product_symbol => "product_symbol"),
        get_futures_orderbook(product_symbol => "product_symbol"),
        get_futures_public_trades(product_symbol => "product_symbol"),
        get_futures_ticker(product_symbol => "product_symbol"),
        get_spot_all_tickers(),
        get_spot_instrument_info(),
        get_spot_kline(product_symbol => "product_symbol", timeframe => "timeframe"),
        get_spot_orderbook(product_symbol => "product_symbol"),
        get_spot_public_trades(product_symbol => "product_symbol"),
        get_spot_ticker(product_symbol => "product_symbol"),
    ];
    private [
        cancel_futures_all_orders(),
        cancel_futures_order(order_id => "orderId"),
        cancel_futures_order_by_client_oid(client_oid => "clientOid"),
        cancel_spot_all_orders(),
        cancel_spot_all_orders_by_symbol(product_symbol => "product_symbol"),
        cancel_spot_order(order_id => "orderId", product_symbol => "product_symbol"),
        flex_transfer(currency => "currency", amount => "amount", from_account_type => "fromAccountType", to_account_type => "toAccountType"),
        get_account_balance(),
        get_futures_account(),
        get_futures_cross_margin_leverage(product_symbol => "product_symbol"),
        get_futures_open_order_value(),
        get_futures_order(order_id => "orderId"),
        get_futures_order_by_client_oid(client_oid => "clientOid"),
        get_futures_order_list(),
        get_futures_position(product_symbol => "product_symbol"),
        get_futures_position_mode(),
        get_futures_positions(),
        get_futures_recent_trade_history(),
        get_futures_trade_history(),
        get_spot_open_orders(),
        get_spot_trade_history(),
        get_transfer_quotas(currency => "currency", account_type => "account_type"),
        modify_futures_cross_margin_leverage(product_symbol => "product_symbol", leverage => "leverage"),
        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", type_ => "type", 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_batch_limit_orders(orders => "orders"),
        place_spot_batch_market_orders(orders => "orders"),
        place_spot_batch_orders(orders => "orders"),
        place_spot_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_spot_limit_order(product_symbol => "product_symbol", side => "side", size => "size", price => "price"),
        place_spot_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_spot_market_buy_order(product_symbol => "product_symbol"),
        place_spot_market_order(product_symbol => "product_symbol", side => "side"),
        place_spot_market_sell_order(product_symbol => "product_symbol"),
        place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type"),
        place_spot_post_only_limit_buy_order(product_symbol => "product_symbol", size => "size", price => "price"),
        place_spot_post_only_limit_order(product_symbol => "product_symbol", side => "side", size => "size", price => "price"),
        place_spot_post_only_limit_sell_order(product_symbol => "product_symbol", size => "size", price => "price"),
    ];
}
