use super::client::BingxClient;

crate::exchanges::impl_exchange_method_wrappers! {
    BingxClient;
    public [
        get_kline(product_symbol => "product_symbol", interval => "interval"),
        get_mark_price_kline(product_symbol => "product_symbol", interval => "interval"),
        get_open_interest(product_symbol => "product_symbol"),
        get_orderbook(product_symbol => "product_symbol"),
        get_public_trades(product_symbol => "product_symbol"),
        get_spot_book_ticker(product_symbol => "product_symbol"),
        get_spot_instrument_info(),
        get_spot_kline(product_symbol => "product_symbol", interval => "interval"),
        get_spot_kline_v2(product_symbol => "product_symbol", interval => "interval"),
        get_spot_orderbook(product_symbol => "product_symbol"),
        get_spot_orderbook_v2(product_symbol => "product_symbol"),
        get_spot_price_ticker(product_symbol => "product_symbol"),
        get_spot_public_trades(product_symbol => "product_symbol"),
        get_spot_ticker(product_symbol => "product_symbol"),
        get_swap_instrument_info(),
        get_ticker(),
    ];
    private [
        asset_transfer(from_account => "fromAccount", to_account => "toAccount", asset => "asset", amount => "amount"),
        cancel_spot_batch_orders(product_symbol => "product_symbol", order_ids => "orderIds"),
        cancel_spot_open_orders(),
        cancel_spot_order(product_symbol => "product_symbol"),
        cancel_swap_all_orders(product_symbol => "product_symbol"),
        cancel_swap_batch_order(product_symbol => "product_symbol"),
        cancel_swap_order(product_symbol => "product_symbol"),
        change_margin_type(product_symbol => "product_symbol", margin_type => "marginType"),
        close_swap_all_positions(product_symbol => "product_symbol"),
        close_swap_position(position_id => "positionId"),
        get_account_balance(),
        get_account_uid(),
        get_all_account_balance(),
        get_api_key_info(uid => "uid"),
        get_asset_transfer_records(),
        get_fund_account_balance(),
        get_fund_flow(),
        get_leverage(product_symbol => "product_symbol"),
        get_listen_key(),
        get_margin_type(),
        get_open_orders(),
        get_open_positions(),
        get_order_detail(product_symbol => "product_symbol"),
        get_order_history(),
        get_position_mode(),
        get_spot_account_balance(),
        get_spot_commission_rate(product_symbol => "product_symbol"),
        get_spot_my_trades(product_symbol => "product_symbol"),
        get_spot_open_orders(product_symbol => "product_symbol"),
        get_spot_order(product_symbol => "product_symbol"),
        get_spot_order_history(product_symbol => "product_symbol"),
        get_swap_account_balance(),
        get_transferable_coins(from_account => "fromAccount", to_account => "toAccount"),
        keep_alive_listen_key(listen_key => "listen_key"),
        place_spot_batch_order(data => "data"),
        place_spot_limit_buy_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_spot_limit_order(product_symbol => "product_symbol", side => "side", quantity => "quantity", price => "price"),
        place_spot_limit_sell_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_spot_market_buy_order(product_symbol => "product_symbol", quote_order_qty => "quoteOrderQty"),
        place_spot_market_sell_order(product_symbol => "product_symbol", quantity => "quantity"),
        place_spot_order(product_symbol => "product_symbol", side => "side", type_ => "type_"),
        place_spot_post_only_buy_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_spot_post_only_order(product_symbol => "product_symbol", side => "side", quantity => "quantity", price => "price"),
        place_spot_post_only_sell_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_swap_batch_order(batch_orders => "batchOrders"),
        place_swap_limit_buy_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_swap_limit_order(product_symbol => "product_symbol", side => "side", quantity => "quantity", price => "price"),
        place_swap_limit_sell_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_swap_market_buy_order(product_symbol => "product_symbol", quantity => "quantity"),
        place_swap_market_order(product_symbol => "product_symbol", side => "side", quantity => "quantity"),
        place_swap_market_sell_order(product_symbol => "product_symbol", quantity => "quantity"),
        place_swap_order(product_symbol => "product_symbol", type_ => "type_", side => "side"),
        place_swap_post_only_buy_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        place_swap_post_only_order(product_symbol => "product_symbol", side => "side", quantity => "quantity", price => "price"),
        place_swap_post_only_sell_order(product_symbol => "product_symbol", quantity => "quantity", price => "price"),
        replace_swap_order(product_symbol => "product_symbol", order_id => "orderId", cancel_replace_mode => "cancelReplaceMode", type_ => "type_", side => "side", position_side => "positionSide"),
        set_leverage(product_symbol => "product_symbol", side => "side", leverage => "leverage"),
        set_position_mode(dual_side_position => "dualSidePosition"),
        test_swap_order(product_symbol => "product_symbol", type_ => "type_", side => "side"),
    ];
}
