"""应用配置

从项目根目录的 .env 文件加载配置（若存在）。
API_KEY 留空表示不启用写操作鉴权（适用于纯内网环境）。
"""

import os
from pathlib import Path

from dotenv import load_dotenv

BASE_DIR = Path(__file__).resolve().parent.parent.parent
load_dotenv(BASE_DIR / ".env")


class Settings:
    """应用配置项"""

    APP_NAME: str = os.getenv("APP_NAME", "VPS 资产管理系统")
    # 写操作（POST/PUT/DELETE）鉴权密钥；留空则不校验
    API_KEY: str = os.getenv("API_KEY", "")
    # Agent 上报鉴权密钥；配置后 Agent 上报需携带 X-Agent-Key
    AGENT_KEY: str = os.getenv("AGENT_KEY", "")
    # 凭证加密主密钥（Fernet）；生成：python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())'
    MASTER_KEY: str = os.getenv("MASTER_KEY", "")

    # ---- 通知渠道：Telegram ----
    TELEGRAM_BOT_TOKEN: str = os.getenv("TELEGRAM_BOT_TOKEN", "")
    TELEGRAM_CHAT_ID: str = os.getenv("TELEGRAM_CHAT_ID", "")

    # ---- 通知渠道：邮件（SMTP）----
    SMTP_HOST: str = os.getenv("SMTP_HOST", "")
    SMTP_PORT: int = int(os.getenv("SMTP_PORT", "465"))
    SMTP_USER: str = os.getenv("SMTP_USER", "")
    SMTP_PASSWORD: str = os.getenv("SMTP_PASSWORD", "")
    SMTP_FROM: str = os.getenv("SMTP_FROM", "")
    SMTP_TO: str = os.getenv("SMTP_TO", "")

    # ---- 续费提醒 ----
    RENEWAL_THRESHOLD_DAYS: int = int(os.getenv("RENEWAL_THRESHOLD_DAYS", "30"))

    # ---- 监控数据保留策略（自动清理）----
    # MetricPoint 时序数据保留天数（Agent 高频上报，默认 30 天）
    METRICS_RETENTION_DAYS: int = int(os.getenv("METRICS_RETENTION_DAYS", "30"))
    # SecurityCheck 安全检查历史保留天数（默认 90 天）
    SECURITY_RETENTION_DAYS: int = int(os.getenv("SECURITY_RETENTION_DAYS", "90"))
    # EventLog 事件日志保留天数（默认 180 天）
    EVENT_LOG_RETENTION_DAYS: int = int(os.getenv("EVENT_LOG_RETENTION_DAYS", "180"))
    # 自动清理间隔（小时），0 表示禁用后台自动清理
    CLEANUP_INTERVAL_HOURS: int = int(os.getenv("CLEANUP_INTERVAL_HOURS", "24"))

    # ---- Agent 上报频率限制 ----
    # 同一 asset_id 两次上报的最小间隔（秒），0 表示不限制
    AGENT_REPORT_MIN_INTERVAL: int = int(os.getenv("AGENT_REPORT_MIN_INTERVAL", "30"))

    # ---- CORS 允许来源（逗号分隔），默认本地 + Tailscale ----
    CORS_ORIGINS: str = os.getenv(
        "CORS_ORIGINS",
        "http://127.0.0.1:8000,http://localhost:8000,https://dify.taile5765c.ts.net",
    )


settings = Settings()
