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

#pragma once

#include <cstdint>
#include <climits>

namespace x1 {
    // 常量定义
    constexpr uint8_t CONST_STR_SECURITY_CODE_LEN = 9;      ///< 证券代码长度，含字符串终止符
    constexpr uint16_t CONST_ERROR_MSG_LEN = 256;           ///< 错误信息长度
    constexpr uint8_t CONST_SECURITY_NAME_LEN = 41;         ///< 证券名称长度
    constexpr uint8_t CONST_ACC_NAME_LEN = 64 + 1;          ///< 账户名称长度
    constexpr uint8_t CONST_ACC_PASSWD_LEN = 128 + 1;       ///< 账户密码长度
    constexpr uint16_t CONST_TERMINAL_INFO_LEN = 256 + 1;   ///< 终端信息的字符串长度
    constexpr uint8_t CONST_API_VERSION_STR_LEN = 24 + 1;   ///< API 版本信息字符串长度
    constexpr uint64_t PAGE_REQ_COUNT_MIN = 1;              ///< 分页请求最小数量

    // 类型定义
    typedef int64_t amount_t;                               ///< 金额 类型
    typedef int64_t price_t;                                ///< 价格 类型
    typedef int64_t quantity_t;                             ///< 数量 类型

    /**
     * @brief API日志级别
     */
    enum class ApiLogLevel : uint8_t {
        LOG_FATAL = 0,                                      ///< fatal级别
        LOG_ERROR = 1,                                      ///< error级别
        LOG_WARN = 2,                                       ///< warn级别
        LOG_INFO = 3,                                       ///< info级别
        LOG_DEBUG = 4,                                      ///< debug级别
        LOG_TRACE = 5,                                      ///< trace级别
    };

    /**
     * @brief 终端类型
     */
    enum class TerminalType : uint8_t {
        PC = 1,                                             ///<"PC",PC-windows及MacOS
        ANDROID,                                            ///<"MA",Mobile-Android
        IOS,                                                ///<"MI",Mobile-Ios
        WP,                                                 ///<"MW",Mobile-Windows Phone
        STATION,                                            ///<"WP",无盘站
        TEL,                                                ///<"TO",电话委托
        PC_LINUX                                            ///<"OH",PC-linux及其他终端
    };

    /**
     * @brief 交易所编号定义
     */
    enum class ExchangeIndex : uint8_t {
        INIT = 0,                                           ///< 初始化值或者未知
        SH   = 1,                                           ///< 上海证券交易所。
        SZ   = 2,                                           ///< 深圳证券交易所。
    };

    /**
     * @brief 买卖方向
     */
    enum class Side : uint8_t {
        BUY  = 1,                                           ///< 买入(ETF申购)。
        SELL = 2,                                           ///< 卖出(ETF赎回)。
    };

    /**
     * @brief 证券类型
     */
    enum class QuoteSecurityType : uint8_t{
        STOCK   = 1,                                        ///< 股票
        FUND    = 2,                                        ///< 基金
        BOND    = 3,                                        ///< 债券
        OPTION  = 4,                                        ///< 期权
        INDEX   = 5,                                        ///< 指数
        UNKNOWN = 99,                                       ///< 未知类型
    };

    /**
     * @brief 证券适当性枚举类型
     */
    enum class QualificationType : uint8_t{
        PUBLIC       = 1,                                   ///< 包括普通投资者、专业投资者 在内的所有投资者
        COMMON       = 2,                                   ///< 仅专业投资者
        ORGANIZATION = 3,                                   ///< 仅专业投资者中的机构投资者
        UNKNOWN      = 99,                                  ///< 其他
    };

}

