import os


def _bool(name: str, default: bool) -> bool:
    return os.getenv(name, str(default)).strip().lower() in ("1", "true", "yes", "on")


def _int(name: str, default: int) -> int:
    try:
        return int(os.getenv(name, "") or default)
    except ValueError:
        return default


def _api_keys() -> dict:
    """GATEWAY_API_KEYS="moodle:abc,nahel:def"  ->  {"abc": "moodle", "def": "nahel"}"""
    out = {}
    for item in os.getenv("GATEWAY_API_KEYS", "").split(","):
        item = item.strip()
        if not item:
            continue
        name, _, key = item.rpartition(":")
        out[key] = name or "default"
    return out


class Settings:
    database_url = os.getenv("DATABASE_URL", "sqlite:///./gateway.db")
    api_keys = _api_keys()
    admin_key = os.getenv("ADMIN_KEY", "")
    webhook_token = os.getenv("WEBHOOK_TOKEN", "")
    gateway_internal_url = os.getenv("GATEWAY_INTERNAL_URL", "http://gateway:8000")

    provider = os.getenv("PROVIDER", "evolution").strip().lower()
    evolution_url = os.getenv("EVOLUTION_URL", "http://evolution:8080").rstrip("/")
    evolution_api_key = os.getenv("EVOLUTION_API_KEY", "")
    instance_name = os.getenv("INSTANCE_NAME", "lms")

    cloud_token = os.getenv("CLOUD_API_TOKEN", "")
    cloud_phone_id = os.getenv("CLOUD_API_PHONE_NUMBER_ID", "")
    cloud_version = os.getenv("CLOUD_API_VERSION", "v23.0")

    default_country_code = os.getenv("DEFAULT_COUNTRY_CODE", "966").strip().lstrip("+")
    default_locale = os.getenv("DEFAULT_LOCALE", "ar")
    site_name = os.getenv("SITE_NAME", "LMS")
    templates_path = os.getenv("TEMPLATES_PATH", "/app/templates.yml")

    min_delay = _int("MIN_DELAY_SECONDS", 6)
    max_delay = _int("MAX_DELAY_SECONDS", 15)
    daily_cap = _int("DAILY_CAP", 150)
    typing_delay_ms = _int("TYPING_DELAY_MS", 1500)
    max_attempts = _int("MAX_ATTEMPTS", 5)
    require_opt_in = _bool("REQUIRE_OPT_IN", False)
    check_number_exists = _bool("CHECK_NUMBER_EXISTS", True)

    smtp_host = os.getenv("SMTP_HOST", "").strip()
    smtp_port = _int("SMTP_PORT", 587)
    smtp_user = os.getenv("SMTP_USER", "")
    smtp_password = os.getenv("SMTP_PASSWORD", "")
    smtp_from = os.getenv("SMTP_FROM", "no-reply@example.com")
    smtp_tls = _bool("SMTP_TLS", True)
    fallback_after_minutes = _int("FALLBACK_AFTER_MINUTES", 30)


settings = Settings()
