"""平台账号 Schema

凭证语义约定：
- login_password / api_config：Create 时传入即加密存储；Update 时 None 表示不修改。
- Read 永不返回凭证明文/密文，只给布尔标记（has_login_password / has_api_config）。
"""

from datetime import datetime
from typing import Optional

from sqlmodel import SQLModel


class AccountBase(SQLModel):
    name: str
    platform: Optional[str] = None
    remark: Optional[str] = None
    login_user: Optional[str] = None


class AccountCreate(AccountBase):
    login_password: Optional[str] = None  # 登录密码（明文传入，加密存储）
    api_config: Optional[str] = None  # API 配置 JSON 字符串（加密存储，供 SDK 同步）


class AccountUpdate(SQLModel):
    name: Optional[str] = None
    platform: Optional[str] = None
    remark: Optional[str] = None
    login_user: Optional[str] = None
    login_password: Optional[str] = None  # None = 不修改
    api_config: Optional[str] = None  # None = 不修改


class AccountRead(AccountBase):
    id: int
    created_at: datetime
    asset_count: int = 0  # 引用该账号的资产数（列表接口填充）
    has_login_password: bool = False
    has_api_config: bool = False
    last_synced_at: Optional[datetime] = None
