"""Configuration management for Modpack Version Checker."""

from __future__ import annotations

import json
from pathlib import Path
from typing import Optional

from pydantic import BaseModel, Field

CONFIG_DIR = Path.home() / ".config" / "modpack-checker"
CONFIG_FILE = CONFIG_DIR / "config.json"
DEFAULT_DB_PATH = str(CONFIG_DIR / "modpacks.db")


class Config(BaseModel):
    """Application configuration, persisted to ~/.config/modpack-checker/config.json."""

    curseforge_api_key: str = ""
    discord_webhook_url: Optional[str] = None
    database_path: str = DEFAULT_DB_PATH
    check_interval_hours: int = Field(default=6, ge=1, le=168)
    notification_on_update: bool = True

    @classmethod
    def load(cls) -> "Config":
        """Load configuration from disk, returning defaults if not present."""
        if CONFIG_FILE.exists():
            try:
                with open(CONFIG_FILE) as f:
                    data = json.load(f)
                return cls(**data)
            except (json.JSONDecodeError, ValueError):
                import sys
                print(
                    f"Warning: config file corrupted ({CONFIG_FILE}), using defaults.",
                    file=sys.stderr,
                )
                return cls()
        return cls()

    def save(self) -> None:
        """Persist configuration to disk."""
        CONFIG_DIR.mkdir(parents=True, exist_ok=True)
        with open(CONFIG_FILE, "w") as f:
            json.dump(self.model_dump(), f, indent=2)

    def is_configured(self) -> bool:
        """Return True if the minimum required config (API key) is present."""
        return bool(self.curseforge_api_key)
