"""认证与后台账户配置。"""

import os

from pathlib import Path


def _dotenv_cache():
    cache = getattr(_dotenv_cache, "_cache", None)
    if cache is not None:
        return cache
    env_path = Path(__file__).resolve().parents[1] / ".env"
    data = {}
    if env_path.exists():
        for raw in env_path.read_text(encoding="utf-8").splitlines():
            line = raw.strip()
            if not line or line.startswith("#") or "=" not in line:
                continue
            key, value = line.split("=", 1)
            data[key.strip()] = value.strip().strip('"').strip("'")
    _dotenv_cache._cache = data
    return data


def _get(name: str, default: str = "") -> str:
    # 优先读取 .env 文件，未找到再回退环境变量
    return _dotenv_cache().get(name, os.environ.get(name, default))


ADMIN_USERNAME = _get("AGENT_ADMIN_USERNAME", "")
ADMIN_PASSWORD_HASH = _get("AGENT_ADMIN_PASSWORD_HASH", "")

# 管理员二级密码（可选）。
# 优先使用哈希值；若未提供哈希，将回退到明文配置。
ADMIN_SECONDARY_PASSWORD_HASH = _get("ADMIN_SECONDARY_PASSWORD_HASH", "")
ADMIN_SECONDARY_PASSWORD = _get("ADMIN_SECONDARY_PASSWORD", "")

# 二级密码会话有效期（秒）。默认为 30 分钟，可根据需要在环境变量中覆盖。
ADMIN_SECONDARY_TTL_SECONDS = int(_get("AGENT_ADMIN_SECONDARY_TTL_SECONDS", "1800") or 1800)

# API Token 加密密钥来源；用于后台安全存储可回显的 Token。
# 使用任意字符串即可，内部会通过 SHA256 导出 Fernet key。
API_TOKEN_SECRET = _get("API_TOKEN_SECRET", "")

__all__ = [
    "ADMIN_USERNAME",
    "ADMIN_PASSWORD_HASH",
    "ADMIN_SECONDARY_PASSWORD_HASH",
    "ADMIN_SECONDARY_PASSWORD",
    "ADMIN_SECONDARY_TTL_SECONDS",
    "API_TOKEN_SECRET",
]
