/**
 * @file main.cpp
 * @author 上海前路有光数字科技
 * @date 2026-03-10
 * @brief XLTPrivilege C++版使用示例主程序
 * 本程序演示如何使用XLTPrivilege管理接口进行初始化、登录、订阅、查询、资金划转等操作。
 * 用户可参考本程序，结合自己的业务需求，开发自己的管理程序。
 */

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

#include "xlt_privilege_demo.h"

static std::atomic<bool> g_stop{false};

static void on_signal(int /*sig*/) {
    g_stop.store(true);
}

int main() {
    std::signal(SIGINT, on_signal);
    std::signal(SIGTERM, on_signal);

    XLTPrivilegeDemo 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;

    // uint64_t trade_token = 0;

    // if (!demo.query_assets(1391)) return -1;
    // if (!demo.query_positions(1391)) return -1;
    // if (!demo.query_orders(1391)) return -1;
    // if (!demo.query_orders_by_page(1391)) return -1;
    // if (!demo.query_trades(1391)) return -1;
    // if (!demo.query_init_assets(1391)) return -1;
    // if (!demo.query_init_positions(1391)) return -1;
    // if (!demo.query_trade_account_info(1391)) return -1;
    // if (!demo.query_brief_assets(1391)) return -1;
    // if (!demo.query_brief_positions(1391)) return -1;
    // if (!demo.dump_final_file()) return -1;
    // if (!demo.unbind_user_tgw(9)) return -1;

    // 主柜资金划转示例
    // if (!demo.submit_counter_fund_transfer_request("BIZ20260310001", 3, x1::FundTransSide::IN, 2000000)) return -1;
    // if (!demo.submit_counter_fund_transfer_result(x1::FundTransSource::ADMIN, "BIZ20260310001", 3, x1::FundTransSide::IN, 2000000, x1::FundTransStatus::SUCCESS, "")) return -1;

    // 双中心资金划转示例
    // if (!demo.submit_cluster_fund_transfer_request("CLUSTER001", 9, 2000000)) return -1;
    // if (!demo.submit_cluster_fund_transfer_result(x1::FundTransSource::ADMIN, "CLUSTER001", 9, 2000000, x1::FundTransStatus::SUCCESS, "")) return -1;

    // 资金划拨执行请求示例
    // if (!demo.insert_fund_transfer_exec("EXEC20260319006", demo.get_account_index(trade_token), x1::FundTransSide::IN, 4000000, 0, x1::FundTransExecType::NORMAL)) return -1;
    // if (!demo.insert_fund_transfer_exec("EXEC20260319009", 1391, x1::FundTransSide::IN, 4000000, 0, x1::FundTransExecType::NORMAL)) return -1;

    // sleep(10);
    //
    // if (!demo.query_assets(1391)) return -1;
    // if (!demo.query_brief_assets(1391)) return -1;

    while (!g_stop.load()) {
        sleep(1);
    }

    return 0;
}
