from __future__ import annotations

import os
from typing import cast, Literal

from .contracts import DisplayPolicy, RuntimeConfig


def _bool_env(name: str, default: bool) -> bool:
    value = os.getenv(name)
    if value is None:
        return default
    return value.strip() in {"1", "true", "TRUE", "yes", "YES"}


def load_runtime_config() -> RuntimeConfig:
    finance_mode = os.getenv("FINANCE_ADAPTER_MODE", "mock")
    health_mode = os.getenv("HEALTH_ADAPTER_MODE", "mock")
    autoshorts_mode = os.getenv("AUTOSHORTS_ADAPTER_MODE", "mock")
    return RuntimeConfig(
        jarvis_env=os.getenv("JARVIS_ENV", "development"),
        jarvis_demo_mode=_bool_env("JARVIS_DEMO_MODE", True),
        jarvis_public_base_url=os.getenv("JARVIS_PUBLIC_BASE_URL", "https://jarvis.local"),
        jarvis_gateway_host=os.getenv("JARVIS_GATEWAY_HOST", "127.0.0.1"),
        jarvis_gateway_port=int(os.getenv("JARVIS_GATEWAY_PORT", "8080")),
        jarvis_demo_api_port=int(os.getenv("JARVIS_DEMO_API_PORT", "8010")),
        jarvis_demo_dashboard_port=int(os.getenv("JARVIS_DEMO_DASHBOARD_PORT", "5173")),
        jarvis_operator_demo_profile=cast(Literal["demo_mock", "demo_mixed_readonly", "mixed_readonly_handoff"], os.getenv("JARVIS_OPERATOR_DEMO_PROFILE", "demo_mock")),
        jarvis_dev_cors_origins=[
            item.strip()
            for item in os.getenv("JARVIS_DEV_CORS_ORIGINS", "http://127.0.0.1:5174,http://localhost:5174").split(",")
            if item.strip()
        ],
        finance_adapter_mode=cast(Literal["mock", "live_readonly", "disabled"], finance_mode),
        finance_api_base_url=os.getenv("FINANCE_API_BASE_URL") or None,
        finance_legacy_dashboard_url=os.getenv("FINANCE_LEGACY_DASHBOARD_URL") or None,
        finance_read_timeout_seconds=float(os.getenv("FINANCE_READ_TIMEOUT_SECONDS", "3")),
        health_adapter_mode=cast(Literal["mock", "local_probe", "safe_marker", "disabled"], health_mode),
        health_runtime_base=os.getenv("HEALTH_RUNTIME_BASE") or None,
        health_safe_status_marker_path=os.getenv("HEALTH_SAFE_STATUS_MARKER_PATH") or None,
        health_safe_status_max_age_hours=int(os.getenv("HEALTH_SAFE_STATUS_MAX_AGE_HOURS", "72")),
        health_legacy_dashboard_url=os.getenv("HEALTH_LEGACY_DASHBOARD_URL") or None,
        autoshorts_adapter_mode=cast(Literal["mock", "disabled", "local_probe", "live_readonly"], autoshorts_mode),
        autoshorts_api_base_url=os.getenv("AUTOSHORTS_API_BASE_URL") or None,
        autoshorts_runtime_base=os.getenv("AUTOSHORTS_RUNTIME_BASE") or None,
        autoshorts_legacy_dashboard_url=os.getenv("AUTOSHORTS_LEGACY_DASHBOARD_URL") or None,
        family_legacy_dashboard_url=os.getenv("FAMILY_LEGACY_DASHBOARD_URL") or os.getenv("VITE_FAMILY_DASHBOARD_URL") or None,
        jarvis_operator_public_origin=os.getenv("JARVIS_OPERATOR_PUBLIC_ORIGIN") or None,
        jarvis_allow_tailnet_links=_bool_env("JARVIS_ALLOW_TAILNET_LINKS", False),
        redaction_default_policy=DisplayPolicy(os.getenv("REDACTION_DEFAULT_POLICY", "summary")),
        allow_exact_finance_values=_bool_env("ALLOW_EXACT_FINANCE_VALUES", False),
        allow_health_detail_links=_bool_env("ALLOW_HEALTH_DETAIL_LINKS", False),
        log_level=os.getenv("LOG_LEVEL", "INFO"),
    )
