"""平台/服务商注册表模型

Provider 是资产的归属平台预设字典，提供唯一标识（slug），
为未来按平台对接 SDK（自动同步 VPS/域名/AI 状态）打基础。
"""

from datetime import datetime
from enum import Enum
from typing import Optional

from sqlmodel import Field, SQLModel

from app.core.timeutils import utcnow


class ProviderCategory(str, Enum):
    """平台分类"""

    VPS = "vps"  # 云服务器
    DOMAIN = "domain"  # 域名注册商
    AI_AGENT = "ai_agent"  # AI 服务商
    CLOUDFLARE = "cloudflare"  # Cloudflare（DNS/Workers/R2/Tunnel/Mail）
    OTHER = "other"  # 其他


class Provider(SQLModel, table=True):
    """平台/服务商（预设 + 自定义）"""

    __tablename__ = "providers"

    id: Optional[int] = Field(default=None, primary_key=True)
    slug: str = Field(index=True, unique=True, description="唯一标识，如 aliyun/vultr/openai")
    name: str = Field(index=True, description="显示名，如 阿里云")
    name_en: Optional[str] = Field(default=None, description="英文名")
    category: ProviderCategory = Field(index=True, description="平台分类")
    services: str = Field(
        default="", description="提供的服务列表（逗号分隔）：vps/domain/ai_agent/cloudflare/ssl_cert/cdn/dns/other，综合平台可多项"
    )
    website: Optional[str] = Field(default=None, description="官网")
    console_url: Optional[str] = Field(default=None, description="管理面板 URL")
    sdk_type: Optional[str] = Field(
        default=None, description="SDK 类型标识，如 aliyun-sdk/vultr-api（供扩展用）"
    )
    api_config_encrypted: Optional[str] = Field(
        default=None, description="加密的 API 配置 JSON（access_key/secret 等）"
    )
    enabled: bool = Field(default=True, description="是否启用")
    remark: Optional[str] = Field(default=None, description="备注")
    last_synced_at: Optional[datetime] = Field(
        default=None, description="最近一次 SDK 同步时间"
    )
    created_at: datetime = Field(default_factory=utcnow, description="创建时间")
