from __future__ import annotations

import os
from dataclasses import dataclass


def _bool(name: str, default: bool = False) -> bool:
    raw = os.getenv(name)
    if raw is None:
        return default
    return raw.strip().lower() in {"1", "true", "yes", "on"}


@dataclass(frozen=True)
class Settings:
    database_url: str
    sahmk_api_key: str | None
    admin_token: str | None
    email_to: str | None
    email_from: str | None
    gmail_smtp_user: str | None
    gmail_smtp_app_password: str | None
    scheduler_enabled: bool
    email_enabled: bool
    top_x: int

    @classmethod
    def from_env(cls) -> "Settings":
        return cls(
            database_url=os.getenv("DATABASE_URL", "sqlite:///investly-runtime.db"),
            sahmk_api_key=os.getenv("SAHMK_API_KEY"),
            admin_token=os.getenv("INVESTLY_ADMIN_TOKEN"),
            email_to=os.getenv("INVESTLY_EMAIL_TO"),
            email_from=os.getenv("INVESTLY_EMAIL_FROM"),
            gmail_smtp_user=os.getenv("GMAIL_SMTP_USER"),
            gmail_smtp_app_password=os.getenv("GMAIL_SMTP_APP_PASSWORD"),
            scheduler_enabled=_bool("INVESTLY_SCHEDULER_ENABLED", True),
            email_enabled=_bool("INVESTLY_EMAIL_ENABLED", False),
            top_x=max(1, int(os.getenv("INVESTLY_TOP_X", "10"))),
        )

    def email_ready(self) -> bool:
        return bool(
            self.email_enabled
            and self.email_to
            and self.gmail_smtp_user
            and self.gmail_smtp_app_password
        )
