#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
模块名称：dingtalk_config.py
模块描述：系统管理 钉钉对接配置数据库模型定义

作者：czj
创建日期：2026-08-13
最后修改：2026-08-13
"""

from datetime import datetime
from typing import Optional
from sqlalchemy import String, DateTime, Integer
from sqlalchemy.orm import Mapped, mapped_column

from app.database import Base


class DingTalkConfig(Base):
    """
    钉钉对接配置数据库模型

    存储钉钉开放平台企业内部应用对接凭据，支持持久化到数据库。
    使用固定 ID 为 1 的单行记录。

    Attributes:
        id (int): 主键，固定为 1
        app_key (str): 钉钉应用 AppKey
        app_secret (str): 钉钉应用 AppSecret
        agent_id (int): 钉钉应用 AgentId
        updated_at (datetime): 更新时间
    """

    __tablename__ = "dingtalk_configs"

    id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=False, default=1, comment="配置ID（固定为1）")
    app_key: Mapped[str] = mapped_column(String(255), default="", comment="钉钉AppKey")
    app_secret: Mapped[str] = mapped_column(String(255), default="", comment="钉钉AppSecret")
    agent_id: Mapped[int] = mapped_column(Integer, default=0, comment="钉钉AgentId")
    target_url: Mapped[str] = mapped_column(String(500), default="", comment="被测系统URL")
    updated_at: Mapped[Optional[datetime]] = mapped_column(
        DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间"
    )

    def __repr__(self) -> str:
        return f"<DingTalkConfig(id={self.id}, app_key={self.app_key})>"

    def to_dict(self) -> dict:
        return {
            "app_key": self.app_key or "",
            "app_secret": self.app_secret or "",
            "agent_id": self.agent_id or 0,
            "target_url": self.target_url or "",
        }