/**
 * @file aiagent_config.h
 * @brief AI Agent SDK 配置项。
 *
 * aiagent_cfg_params_t 配置云端会话参数。
 * aiagent_config_t 配置连接信息和本地运行参数。
 */

#ifndef AIAGENT_CONFIG_H
#define AIAGENT_CONFIG_H

#include "aiagent_types.h"
#include "aiagent_credentials.h"

#ifdef __cplusplus
extern "C" {
#endif

/* WebSocket 服务地址 */
/* 中国大陆地址 */
#define AIAGENT_WS_HOST_DEFAULT     "wss://rtc-aiotgw.exp.bcelive.com/v1/realtime"
/* 中国香港地址 */
#define AIAGENT_WS_HOST_HONGKONG    "wss://rtc-out-aiotgw.exp.bcelive.com/v1/realtime"
/* 美国地址 */
#define AIAGENT_WS_HOST_AMERICA     "wss://biolifeagent-gw.com/v1/realtime"
/* 应用 测试 ID 地址 */
#define AIAGENT_WS_HOST_TEST        "ws://ai.agent.kaywang.cn:8988/test/v1/realtime"

/* 是否为海外接入区域，供地址、参数、DNS 选择统一引用 */
#if AIAGENT_REGION == AIAGENT_REGION_MAINLAND
#define AIAGENT_REGION_IS_INTL    0
#else
#define AIAGENT_REGION_IS_INTL    1
#endif

/* 场景配置统一使用 AIAGENT_WS_HOST */
#if AIAGENT_CONN_MODE == AIAGENT_CONN_MODE_TEST
#define AIAGENT_WS_HOST           AIAGENT_WS_HOST_TEST
#elif AIAGENT_REGION == AIAGENT_REGION_HONGKONG
#define AIAGENT_WS_HOST           AIAGENT_WS_HOST_HONGKONG
#elif AIAGENT_REGION == AIAGENT_REGION_AMERICA
#define AIAGENT_WS_HOST           AIAGENT_WS_HOST_AMERICA
#else
#define AIAGENT_WS_HOST           AIAGENT_WS_HOST_DEFAULT
#endif

/* 云端会话参数。未配置的字段不会写入连接 URL。 */
typedef struct {
    /* 地理位置 */
    const char *location;           /* 地址描述，如 "北京市海淀区" */
    const char *gis;                /* 经纬度，如 "31.235,121.480" */
    bool ip_to_location;            /* 使用 IP 获取地理位置 */

    /* 角色 */
    const char *role;               /* 角色描述，如 "旅游达人" */
    const char *scene_role;         /* 控制台配置的角色名称 */
    const char *scene_role_cfg;     /* 自定义角色配置 JSON */

    /* 招呼语和语言 */
    const char *tts_sayhi;          /* 开场招呼语，如 "你好！" */
    const char *lang;               /* 语言，如 zh/en/zh_yue/zh_sc/ja */

    /* 下行音频 */
    const char *audiocodec;         /* 音频编码，如 opus/raw16k/pcmu/g722 */
    int audio_bitrate;              /* 音频码率 */
    bool aoco;                      /* 仅使用 Opus CELT */
    int aopt;                       /* Opus 帧长，单位 ms */

    /* 打断控制 */
    bool disable_voice_auto_int;    /* 关闭云端自动打断 */
    const char *interruption_words; /* 打断词，多个词用逗号分隔 */
    const char *interruption_answer;/* 打断后的回复语 */
    int auto_pause_secs;            /* 自动暂停时长，单位秒，0 表示关闭 */

    /* 静音补包 */
    bool dfda;                      /* 关闭静音补包 */

    /* TTS */
    const char *tts;                /* TTS 配置名称 */
    const char *tts_url;            /* TTS 详细配置 JSON */
    int tts_end_delay_ms;           /* TTS 结束延迟，单位 ms */
    bool tts_enable_fast_send;      /* 开启 TTS 加速下发 */
    int tts_fast_send_second;       /* 加速持续时长，单位秒 */
    float tts_fast_send_ratio;      /* 加速倍率 */
    bool etbt;                      /* TTS 同步开关 */

    /* LLM / 第三方模型 */
    const char *llm;                /* 模型配置名称 */
    const char *llm_url;            /* 模型服务地址 */
    const char *llm_cfg;            /* 模型配置 JSON */
    const char *llm_token;          /* 模型访问 token */

    /* 端到端语音模型 */
    const char *e2ellm_mode;        /* 模型工作模式 */
    int e2ellm_sample_rate;         /* 音频采样率 */

    /* 用户标识 */
    const char *user_id;            /* 用户 ID */

    /* ASR */
    bool asr_long_audio_mode;       /* 按键收音模式 */
    bool asr_vad_append;            /* 开启连续语音拼接 */
    int asr_vad;                    /* 断句时长，单位 ms */
    int asr_vad_level;              /* 声音能量阈值 */
    const char *hotwords;           /* ASR 热词，多个词用逗号分隔 */

    /* 声纹 */
    const char *voice_fp_url;       /* 声纹配置 JSON */

    /* 云端播放 */
    bool remote_music_player;       /* 开启云端播放 */

    /* 情感识别 */
    const char *emotion_cfg;        /* 情感识别配置 JSON */

    /* 云端 3A */
    const char *cloud_3a_url;       /* 云端 3A 配置 JSON */

    /* 内容库 */
    const char *content_used_db;    /* 内容库名称，多个库用逗号分隔 */

    /* 翻译 */
    const char *translation_src_lang;   /* 源语言 */
    const char *translation_tgt_lang;   /* 目标语言 */
    const char *translation_svc_ver;    /* 翻译服务版本 */

    /* 视觉/多模态 */
    bool enable_visual;             /* 开启视频通道 */
    int screen_width;               /* 图片宽度 */
    int screen_height;              /* 图片高度 */

    /* 意图路由 */
    const char *intent_cfg;         /* 意图配置 JSON */

    /* MCP */
    const char *mcp_servers;        /* MCP 服务配置 JSON */

    /* 扩展配置 */
    const char *extra_cfg;          /* 追加到 cfg 的 JSON 字段 */
} aiagent_cfg_params_t;

/* 引擎启动配置。 */
typedef struct {
    /* WebSocket 连接 */
    const char *ws_url;             /* 完整连接地址 */
    const char *ws_host;            /* 服务地址 */

    /* 凭证 */
    const char *appid;              /* 应用 ID */
    const char *license_key;        /* 设备 License */

#if AIAGENT_CONN_MODE == AIAGENT_CONN_MODE_AKSK
    const char *access_key;              /* AK */
    const char *secret_key;              /* SK */
#elif AIAGENT_CONN_MODE == AIAGENT_CONN_MODE_USERSERVER
    const char *userserver_url;          /* UserServer 地址 */
    const char *userserver_create_path;  /* 创建会话接口路径 */
    const char *userserver_destroy_path; /* 销毁会话接口路径 */
#endif

    /* 上行音频 */
    const char *audio_codec;        /* 音频编码 */

    /* 云端会话参数 */
    aiagent_cfg_params_t cfg;

    /* 本地运行参数 */
    int audio_sample_rate;          /* 本地采样率 */
    int audio_frame_ms;             /* 本地帧长，单位 ms */
    int audio_channels;             /* 本地声道数 */
    aiagent_interact_mode_t default_mode;
    int volume;                     /* 本地播放音量 0-100 */
    bool aec_enable;                /* 本地回声消除开关 */

    /* Query 增强 */
    const char *enhance_query;      /* 连接成功后发送的增强参数 JSON */

    /* 缓冲区大小，单位字节，0 表示使用默认值 */
    int record_buf_size;
    int playback_buf_size;
    int mic_cbuf_size;
} aiagent_config_t;

/* ========== 默认值填充 ========== */
void aiagent_config_set_defaults(aiagent_config_t *config);

#ifdef __cplusplus
}
#endif

#endif /* AIAGENT_CONFIG_H */
