/**
 * @file xlt_privilege_struct.h
 * @author 上海前路有光数字科技
 * @date 2026-01-10
 * @brief 本文件定义XLT特权数据结构体
 */

#pragma once

#include "xlt_data_type.h"
#include "xlt_trade_struct.h"

namespace x1{
#pragma pack(push, 1)
    /**
    * @brief token信息
    */
    typedef struct {
        uint64_t session_id;                                ///< 会话ID
        uint32_t trade_way;                                 ///< 委托方式
        uint64_t token_id;                                  ///< 令牌ID
        uint64_t login_account_index;                       ///< 登录用户索引
        uint64_t trade_account_index;                       ///< 交易用户索引
        uint8_t client_id;                                  ///< 登录用户的client_id
        char terminal_info[CONST_TERMINAL_INFO_LEN];        ///< 终端信息（若用户没有指定则为API自动采集的终端信息）
        char terminal_info_auto[CONST_TERMINAL_INFO_LEN];   ///< API自动采集的终端信息
        char api_version[CONST_API_VERSION_STR_LEN];        ///< API版本号
    } xlt_internal_token_info_t;


    /**
    * @brief 行情登陆流水信息
    */
    typedef struct xlt_internal_quote_login_info_t {
        uint64_t account_index;                             ///< 登录用户索引
        uint8_t sh_l2_flag;                                 ///< 上海市场l2权限标识（0:无行情权限 1:上海市场）
        uint8_t sz_l2_flag;                                 ///< 深圳市场l2权限标识（0:无行情权限 1:深圳市场）
        char client_ip[46];                                 ///< 客户端IP地址
        uint16_t client_port;                               ///< 客户端端口号
        uint8_t detail_type;                                ///< 明细类型，0:登录明细，1:登出明细
        uint64_t time;                                      ///< 明细时间, 格式为 YYYYMMDDHHMMSSsss
    } xlt_internal_quote_login_info_t;


    /**
    * @brief 持仓简要信息
    */
    typedef struct {
        uint64_t account_index;                             ///< 交易账户索引
        char security_code[CONST_STR_SECURITY_CODE_LEN];    ///< 证券代码
        ExchangeIndex exchange_index;                       ///< 交易市场
        quantity_t total_quantity;                          ///< 总持仓
        quantity_t sellable_quantity;                       ///< 可卖持仓
    } xlt_brief_position_t;

    /**
    * @brief 账户资金简要信息
    */
    typedef struct {
        uint64_t account_index;                             ///< 交易账户索引
        amount_t available_amount;                          ///< 可用资金
        amount_t withdraw_amount;                           ///< 当日划出金额
        amount_t deposit_amount;                            ///< 当日划入金额
    } xlt_brief_asset_t;

    /**
     * @brief 资金划转执行请求
     */
    typedef struct xlt_fund_transfer_exec_request_t {
        uint64_t account_index;                             ///< 交易账号索引
        char biz_no[CONST_BIZ_NO_LEN];                      ///< 资金划转业务流水号，交易API：token_id+序号，管理API：外部系统保证全局唯一
        FundTransSide side;                                 ///< 划转方向，IN-划入（从主柜划入到xlight），OUT-划出（从xlight划出到主柜）
        amount_t amount;                                    ///< 划转金额，放大10000倍
        uint8_t check_flag;                                 ///< 校验标记，0: 不做任何校验，1: 校验可用资金
        FundTransExecType exec_type;                        ///< 资金划转执行类型，NORMAL: 正常处理, ROLLBACK: 回滚
    }xlt_fund_transfer_exec_request_t;

    /**
     * @brief 资金划转执行结果
     */
    typedef struct xlt_fund_transfer_exec_result_t {
        uint64_t account_index;                             ///< 交易账号索引
        char biz_no[CONST_BIZ_NO_LEN];                      ///< 资金划转业务流水号，交易API：token_id+序号，管理API：外部系统保证全局唯一
        FundTransSide side;                                 ///< 划转方向，IN-划入（从主柜划入到xlight），OUT-划出（从xlight划出到主柜）
        amount_t amount;                                    ///< 划转金额，放大10000倍
        uint8_t check_flag;                                 ///< 校验标记，0: 不做任何校验，1: 校验可用资金
        FundTransExecType exec_type;                        ///< 资金划转执行类型，NORMAL: 正常处理, ROLLBACK: 回滚
        int64_t time;                                       ///< 资金划转的时间，格式为YYYYMMDDHHMMSSsss
        FundTransStatus status;                             ///< 划转状态，DOING-处理中，SUCCESS-成功，FAIL-失败，EXCEPTION-异常
        xlt_error_info_t error_info;                        ///< 如果资金划转失败将通过该字段返回错误信息
    }xlt_fund_transfer_exec_result_t;

#pragma pack(pop)
}

