"""
NER 服务配置
"""
import os
from pydantic_settings import BaseSettings
from typing import Optional, List


class Settings(BaseSettings):
    """应用配置"""
    
    # 服务配置
    app_name: str = "NER Service"
    app_version: str = "1.0.0"
    debug: bool = False
    host: str = "0.0.0.0"
    port: int = 8001
    
    # NER 模型配置
    # rule: 基于规则的简单 NER（开发测试用）
    # ollama: 使用本地 Ollama LLM
    # deepseek: 使用阿里云百炼 DeepSeek API（推荐）
    ner_model: str = "deepseek"
    use_gpu: bool = False
    max_text_length: int = 50000
    
    # Ollama 配置（用于 ollama 模式）
    ollama_url: str = "http://localhost:11434"
    ollama_model: str = "hoangquan456/qwen3-nothink:4b"  # qwen3 无思考版本，直接输出结果
    ollama_timeout: int = 180  # 秒（CPU 模式需要更长时间）
    
    # UniversalNER 专用配置（当 ollama_model 包含 'universal-ner' 时自动启用）
    # 模型名: zeffmuks/universal-ner
    universal_ner_model: str = "zeffmuks/universal-ner"
    
    # 文本分块配置（用于长文本处理）
    chunk_size: int = 2000  # 每个分块的最大字符数
    chunk_overlap: int = 200  # 分块重叠字符数
    
    # DeepSeek API 配置（阿里云百炼平台）
    deepseek_api_key: str = "sk-14a0d0b9eda54b3bb6f0e55a7b8df084"
    deepseek_base_url: str = "https://dashscope.aliyuncs.com/compatible-mode"
    deepseek_model: str = "deepseek-v3.2-exp"
    deepseek_timeout: int = 600
    deepseek_temperature: float = 0.1  # NER 任务使用低温度
    deepseek_max_tokens: int = 4096
    deepseek_max_retries: int = 3
    
    # 实体类型配置
    # 注意：这些类型名需要与 prompt 中的定义一致
    entity_types: List[str] = [
        "PERSON",   # 人名（包含职务+姓名）
        "ORG",      # 机构/组织/部门（完整名称）
        "LOC",      # 地点/位置
        "DATE",     # 日期/时间
        "NUMBER",   # 有意义的数值（带单位，非章节号）
        "DEVICE",   # 设备/系统
        "PROJECT",  # 项目/工程名称
        "METHOD",   # 方法/标准/规范名称
        "DOC_ID",   # 文件编号/标准编号
        "CERT",     # 证书/资质/等级
        "TITLE",    # 职务/职称
        "POLICY",   # 政策法规名称
    ]
    
    # 日志配置
    log_level: str = "INFO"
    
    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"


settings = Settings()
