from __future__ import annotations

import os
from dataclasses import dataclass

from src.errors import UserError

WEBSITE_WEBP_TARGET_KB_ENV_VAR = "WEBSITE_WEBP_TARGET_KB"
GBP_MIN_SIZE_ENV_VAR = "GBP_MIN_SIZE"


@dataclass(frozen=True)
class ImagesConfig:
    website_webp_target_kb: int
    gbp_min_size: int


def load_images_config() -> ImagesConfig:
    return ImagesConfig(
        website_webp_target_kb=_load_positive_int(WEBSITE_WEBP_TARGET_KB_ENV_VAR, default=200),
        gbp_min_size=_load_positive_int(GBP_MIN_SIZE_ENV_VAR, default=250),
    )


def _load_positive_int(name: str, *, default: int) -> int:
    raw = os.environ.get(name, "").strip()
    if not raw:
        return default
    try:
        value = int(raw)
    except ValueError as exc:
        raise UserError(f"Invalid {name}: expected integer, got {raw!r}") from exc
    if value <= 0:
        raise UserError(f"Invalid {name}: must be > 0 (got {value})")
    return value
