"""
全局配置入口。

所有第三方服务连接信息、路径、时区统一在此管理。
环境变量优先级高于默认值，方便不同环境（本地开发 / 测试 / 生产）切换。

第三方集成一览：
  - Google Calendar API v3   （token 文件：gcalcli 兼容格式）
  - HTTP 代理                （内网代理，访问 Google API 用）
  - Telegram                 （OpenClaw 消息投递通道）
  - OpenClaw Cron            （任务调度运行时）
"""

import os
import sys
from pathlib import Path


def _load_env(env_file: Path) -> None:
    """加载 .env 文件，已有的环境变量不覆盖（系统/进程注入的优先级更高）。"""
    if not env_file.is_file():
        return
    with open(env_file, encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            if not line or line.startswith("#") or "=" not in line:
                continue
            key, _, val = line.partition("=")
            key = key.strip()
            val = val.strip()
            if key and key not in os.environ:
                os.environ[key] = val


# 自动加载 sophnet-schedule（本 skill）根目录下的 .env（config/ 的上级目录）
_load_env(Path(__file__).resolve().parent.parent / ".env")

# ─────────────────────────────────────────────────────────────────
# 基础路径
# ─────────────────────────────────────────────────────────────────

# 本 skill 根目录（从环境变量覆盖，或从本文件推导）
_default_skill_base = Path(__file__).resolve().parent.parent  # config/ → skill 根（src/）
SKILL_BASE: Path = Path(
    os.environ.get("SOPHNET_SCHEDULE_BASE")
    or os.environ.get("CRON_SKILL_BASE")
    or _default_skill_base
)

# OpenClaw 工作空间根（部署时通常是 /home/node/.openclaw）
OPENCLAW_BASE: Path = Path(
    os.environ.get("OPENCLAW_BASE", str(Path.home() / ".openclaw"))
)
WORKSPACE_BASE: Path   = OPENCLAW_BASE / "workspace"
SKILLS_CRON_BASE: Path = WORKSPACE_BASE / "skills" / "cron"

# ─────────────────────────────────────────────────────────────────
# 数据 / 输出目录
# ─────────────────────────────────────────────────────────────────

DAILY_DIR: Path        = SKILL_BASE / "daily"
DATA_DIR: Path         = SKILL_BASE / "data"
LAST_EVENTS_FILE: Path = DATA_DIR / "last_events.json"
LOCAL_EVENTS_FILE: Path = DATA_DIR / "local_events.json"
GOOGLE_STATE_FILE: Path = DATA_DIR / "google_state.json"

# ─────────────────────────────────────────────────────────────────
# 第三方：Google Calendar API
# ─────────────────────────────────────────────────────────────────

# gcalcli 兼容 token 文件（含 client_id / client_secret / refresh_token）
GCAL_TOKEN_PATH: Path = Path(
    os.environ.get(
        "GCAL_TOKEN_PATH",
        Path.home() / ".config" / "gcalcli" / "token.json",
    )
)

# HTTP 代理（内网访问 Google API 需要）
_PROXY = os.environ.get("HTTP_PROXY", "")
PROXIES: "dict[str, str]" = {"http": _PROXY, "https": _PROXY} if _PROXY else {}

GCAL_TIMEOUT: int      = int(os.environ.get("GCAL_TIMEOUT",      "10"))
GCAL_MAX_RETRIES: int  = int(os.environ.get("GCAL_MAX_RETRIES",  "3"))
GCAL_CALENDAR_ID: str  = os.environ.get("GCAL_CALENDAR_ID",      "primary")


def _parse_ssl_verify(value: str) -> bool | str:
    raw = value.strip()
    if not raw:
        return True
    lowered = raw.lower()
    if lowered in {"0", "false", "no", "off"}:
        return False
    if lowered in {"1", "true", "yes", "on"}:
        return True
    return raw


GCAL_SSL_VERIFY: bool | str = _parse_ssl_verify(
    os.environ.get("GCAL_SSL_VERIFY", "true")
)
GOOGLE_OAUTH_SESSION_TTL_MINUTES: int = int(
    os.environ.get("GOOGLE_OAUTH_SESSION_TTL_MINUTES", "15")
)

# ─────────────────────────────────────────────────────────────────
# 时区
# ─────────────────────────────────────────────────────────────────

TIMEZONE: str = os.environ.get("TIMEZONE", "Asia/Shanghai")

# ─────────────────────────────────────────────────────────────────
# 第三方：Telegram（通过 OpenClaw 消息通道投递）
# ─────────────────────────────────────────────────────────────────

TELEGRAM_CHANNEL: str = os.environ.get("TELEGRAM_CHANNEL", "telegram")
TELEGRAM_TO: str      = os.environ.get("TELEGRAM_TO", "")

# ─────────────────────────────────────────────────────────────────
# OpenClaw CLI
# ─────────────────────────────────────────────────────────────────

OPENCLAW_BIN: str = os.environ.get("OPENCLAW_BIN", "openclaw")
PYTHON_BIN: str   = os.environ.get("PYTHON_BIN", sys.executable)

# ─────────────────────────────────────────────────────────────────
# 配置文件路径
# ─────────────────────────────────────────────────────────────────

CONFIG_DIR: Path           = SKILL_BASE / "config"
REMINDER_RULES_FILE: Path  = CONFIG_DIR / "reminder_rules.yaml"
TASK_REGISTRY_FILE: Path   = CONFIG_DIR / "task_registry.yaml"
