/**
* @file xlt_data_type.h
 * @author 上海前路有光数字科技
 * @date 2026-01-10
 * @brief 本文件定义XLT 交易API中使用的基本数据类型和常量
 */

#pragma once

#include <cstdint>
#include <climits>
#include "xlt_data_type.h"
namespace x1 {
    // 常量定义
    constexpr uint8_t CONST_CL_ORD_ID_LEN = 11;             ///< 委托合同号长度，含字符串终止符
    constexpr uint8_t CONST_REPORT_ID_LEN = 32;             ///< 回报ID长度
    constexpr uint16_t CONST_TRD_EXEC_ID_LEN = 16 + 1;      ///< 成交编号长度，含字符串终止符
    constexpr uint8_t CONST_FUND_ACC_NAME_LEN = 14 + 1;     ///< 资金账户名称长度
    constexpr uint8_t CONST_BIZ_NO_LEN = 20;                ///< 资金划拨业务流水号长度，含字符串终止符

    /**
     * @brief 交易消息推送类型
     */
    enum class TradeResumeType : uint8_t {
        RESTART = 1,                                        ///< 从本交易日日初开始推送
        QUICK   = 2,                                        ///< 从最新数据开始推送
        SPECIFY = 3,                                        ///< 从指定sequence开始推送
        NONE    = 99,                                       ///< 不推送交易消息
    };

    /**
     * @brief 报单价格类型
     */
    enum class OrderType: uint8_t {
        NONE                       = 0,                     ///< 无特定类型。
        BEST_FIVE_PRICE_OR_CANCEL  = 1,                     ///< 市转撤（市价最优五档全额成交剩余撤销）。
        LIMIT_PRICE                = 2,                     ///< 限价。
        BEST_FIVE_PRICE_TO_LIMIT   = 3,                     ///< 市转限（市价最优五档全额成交剩余转限价）（仅上海有效）。
        SELF_BEST                  = 4,                     ///< 本方最优。
        COUNTER_BEST               = 5,                     ///< 对手方最优。
        MARKET_PRICE_OR_CANCEL     = 6,                     ///< 市价立即成交剩余撤销（仅深圳有效）。
        MARKET_PRICE_ALL_OR_CANCEL = 7,                     ///< 市价全额成交或撤销（仅深圳有效）。
    };

    /**
     * @brief 业务类型
     */
    enum class BusinessType : uint8_t {
        NONE              = 0,                              ///< 未知类型
        CASH              = 1,                              ///< 现货（股票、基金、深圳可转债等）集中竞价交易
        BOND_MATCH        = 2,                              ///< 债券现券竞价交易
        ETF               = 3,                              ///< ETF申赎业务
        ISSUE             = 4,                              ///< 网上发行业务
        ALLOT             = 5,                              ///< 配售业务
        BOND_CONVERT      = 6,                              ///< 债转股业务
        PLEDGE_STYLE_REPO = 7,                              ///< 债券质押式回购
    };

    /**
     * @brief 订单状态
     */
    enum class OrderStatus : uint8_t {
        INIT          = 0,                                  ///< 初始。
        ALL_TRADED    = 1,                                  ///< 全部成交。
        PART_TRADED   = 2,                                  ///< 部分成交。
        PART_CANCELED = 3,                                  ///< 部分撤单。
        NOT_TRADED    = 4,                                  ///< 未成交。
        ALL_CANCELED  = 5,                                  ///< 全部撤单/已撤单。
        REJECTED      = 6,                                  ///< 废单。
        COUNT         = 7,                                  ///< 委托状态数量。
    };

    /**
     * @brief 交易所订单状态
     */
    enum ExOrdStatus:char {
        ORD_STATUS_NEW            = '0',                    ///< 新订单
        ORD_STATUS_PARTIAL_FILLED = '1',                    ///< 部分成交
        ORD_STATUS_FILLED         = '2',                    ///< 全部成交
        ORD_STATUS_CANCELLED      = '4',                    ///< 已撤销
        ORD_STATUS_REJECT         = '8',                    ///< 拒绝
    };

    /**
     * @brief 交易所执行类型
     */
    enum ExExecType:char {
        EXEC_TYPE_NEW      = '0',                           ///< 订单申报成功
        EXEC_TYPE_CANCELED = '4',                           ///< 订单撤销成功
        EXEC_TYPE_REJECT   = '8',                           ///< 订单申报失败
        EXEC_TYPE_TRADE    = 'F',                           ///< 成交
    };

    /**
     * @brief 交易消息类型
     */
    typedef uint32_t trade_message_type_t;

    /**
     * @brief 交易消息类型枚举
     */
    enum TradeMessageType : trade_message_type_t {
        REPORT      = 1,                                    ///< 交易响应及回报
        RAW_REPORT  = 1<<1,                                 ///< 交易所原始报文
        ORDER_BOOK  = 1<<2,                                 ///< 订单簿消息：订单簿变动消息、资金变动消息、持仓变动消息
    };

    /**
     * @brief 订单回报通知类型
     */
    enum class TradeReportType : uint8_t {
        UNKNOWN         = 0,                                ///< 未知类型
        ORDER_RESPONSE  = 1,                                ///< 申报成功响应
        CANCEL_RESPONSE = 2,                                ///< 撤单成功响应
        TRADE_REPORT    = 3,                                ///< 成交回报
        ORDER_ERROR_RESPONSE = 4,                           ///< 订单申报失败响应（拒单、交易所废单、撤单失败）
        ORDER_END       = 5,                                ///< 订单结束通知
    };

    /**
     * @brief 资金划转请求来源
     */
    enum class FundTransSource : uint8_t {
        ADMIN       = 0,                                    ///< 管理系统发起的资金划转
        OTHER       = 1,                                    ///< 其他来源发起的资金划转
    };

    /**
     * @brief 资金划转方向
     */
    enum class FundTransSide : uint8_t {
        UNKNOWN     = 0,                                    ///< 未知
        IN          = 1,                                    ///< 资金划入
        OUT         = 2,                                    ///< 资金划出
    };

    /**
     * @brief 资金划转状态
     */
    enum class FundTransStatus : uint8_t {
        DOING       = 0,                                    ///< 处理中
        SUCCESS     = 1,                                    ///< 划转成功
        FAIL        = 2,                                    ///< 划转失败
        EXCEPTION   = 3,                                    ///< 划转异常
    };

    /**
     * @brief 资金划转执行类型
     */
    enum class FundTransExecType : uint8_t {
        NORMAL      = 0,                                    ///< 正常处理
        ROLLBACK    = 1,                                    ///< 回滚
    };

}

