import os
from pathlib import Path
from dotenv import load_dotenv

# Load .env from parent directory (~/clawd/.env)
_env_path = Path(__file__).resolve().parent.parent / ".env"
load_dotenv(_env_path)


class Config:
    # Flask
    FLASK_PORT = int(os.getenv("FLASK_PORT", "8081"))
    FLASK_HOST = "127.0.0.1"  # Local only — Tailscale Funnel handles external

    # Twilio
    TWILIO_ACCOUNT_SID = os.getenv("TWILIO_ACCOUNT_SID", "")
    TWILIO_AUTH_TOKEN = os.getenv("TWILIO_AUTH_TOKEN", "")
    TWILIO_PHONE_NUMBER = os.getenv("TWILIO_PHONE_NUMBER", "")  # Sandbox number

    # Claude
    CLAUDE_API_KEY = os.getenv("CLAUDE_API_KEY", "")
    CLAUDE_MODEL = os.getenv("CLAUDE_MODEL", "claude-sonnet-4-6")

    # User
    BILL_PHONE_NUMBER = os.getenv("BILL_PHONE_NUMBER", "")  # +1XXXXXXXXXX format

    # Sports Betting (The Odds API — free key at https://the-odds-api.com)
    ODDS_API_KEY = os.getenv("ODDS_API_KEY", "")

    # Oura Ring API (personal access token from cloud.ouraring.com)
    OURA_ACCESS_TOKEN = os.getenv("OURA_ACCESS_TOKEN", "")

    # Spotify
    SPOTIFY_CLIENT_ID = os.getenv("SPOTIFY_CLIENT_ID", "")
    SPOTIFY_CLIENT_SECRET = os.getenv("SPOTIFY_CLIENT_SECRET", "")

    # Dashboard
    DASHBOARD_DATA_PATH = os.getenv(
        "DASHBOARD_DATA_PATH",
        str(Path(__file__).resolve().parent.parent / "dashboard-data.json"),
    )

    # Logging
    LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
    LOG_DIR = Path(__file__).resolve().parent / "logs"

    @classmethod
    def validate(cls):
        """Ensure all required config values are present."""
        required = {
            "TWILIO_ACCOUNT_SID": cls.TWILIO_ACCOUNT_SID,
            "TWILIO_AUTH_TOKEN": cls.TWILIO_AUTH_TOKEN,
            "TWILIO_PHONE_NUMBER": cls.TWILIO_PHONE_NUMBER,
            "CLAUDE_API_KEY": cls.CLAUDE_API_KEY,
            "BILL_PHONE_NUMBER": cls.BILL_PHONE_NUMBER,
        }
        missing = [k for k, v in required.items() if not v]
        if missing:
            raise ValueError(
                f"Missing required config: {', '.join(missing)}. "
                f"Check your .env file at {_env_path}"
            )
        # Ensure dashboard JSON exists
        if not Path(cls.DASHBOARD_DATA_PATH).exists():
            raise FileNotFoundError(
                f"Dashboard data not found: {cls.DASHBOARD_DATA_PATH}"
            )
        # Ensure log directory exists
        cls.LOG_DIR.mkdir(parents=True, exist_ok=True)
