/**
 * @file main.cpp
 * @author 上海前路有光数字科技
 * @date 2024-03-15
 * @brief XLTTradeApi C++版使用示例主程序
 * 本程序演示如何使用XLTTradeApi进行初始化、登录、下单等操作。
 * 用户可参考本程序，结合自己的业务需求，开发自己的交易程序。
 */

#include <cstdio>
#include <unistd.h>

#include "xlt_trade_demo.h"

int main() {
    XLTTradeDemo demo;

    printf("API version: %s\n", demo.api_version());

    if (!demo.initialize()) return -1;
    if (!demo.login()) return -1;
    // printf("Trading day: %u\n", demo.trading_day());

    if (!demo.subscribe_trade_message()) return -1;
    // if (!demo.rebuild_trade_message(140, 0, demo.get_account_index())) return -1;

    // uint64_t trade_token = 0;
    // 交易授权认证示例（PB/机构场景）
    // trade_token = demo.auth_trade("88888888888801", "12345678");
    // if (trade_token==0) return -1;
    // if (!demo.deauth_trade(trade_token)) return -1;

    // 同步获取初始资产/持仓/账户索引（登录成功后可直接调用）
    demo.print_init_assets();
    demo.print_init_positions();
    printf("Account index: %lu\n", demo.get_account_index());

    if (!demo.query_assets(demo.get_account_index())) return -1;
    if (!demo.query_assets(0)) return -1;
    if (!demo.query_positions(demo.get_account_index())) return -1;
    if (!demo.query_orders()) return -1;
    if (!demo.query_orders_by_page()) return -1;
    if (!demo.query_trades()) return -1;
    if (!demo.query_init_assets(demo.get_account_index())) return -1;
    if (!demo.query_init_positions(demo.get_account_index())) return -1;
    if (!demo.query_trade_account_info()) return -1;
    if (!demo.submit_counter_fund_transfer_request(x1::FundTransSide::IN, 3000000, 0)) return -1;
    if (!demo.submit_cluster_fund_transfer_request(2000000)) return -1;
    if (!demo.rebuild_trade_message(0, 100)) return -1;



    uint64_t xid =demo.insert_order();
    if (xid == 0) return -1;

    sleep(1);
    uint64_t cancel_xid = demo.cancel_order(xid);
    if (cancel_xid == 0) return -1;

    // 重发订单请求（当委托超时时使用）
    // if (!demo.resend_order_request(xid)) return -1;

    // sleep(10);
    // demo.dump_api_performance();
    //

    // if (!demo.deauth_trade(trade_token)) return -1;
    while (true) {

        sleep(1);
    }

    return 0;
}
