from __future__ import annotations

from fastapi import APIRouter, Request

from jarvis_finance.api.schemas.common import HealthStatus, ProviderStatus, RuntimeStatus
from jarvis_finance.config.settings import find_repo_root, load_settings

router = APIRouter(tags=["runtime"])


@router.get("/health", response_model=HealthStatus)
def health() -> HealthStatus:
    return HealthStatus(status="ok", app="jarvis-finance-api", api_version="0", mode="read-only")


@router.get("/runtime/status", response_model=RuntimeStatus)
def runtime_status(request: Request) -> RuntimeStatus:
    root = find_repo_root()
    settings = load_settings(repo_root=root)
    try:
        settings.runtime_paths.base_dir.resolve().relative_to(root.resolve())
        outside_repo = False
    except ValueError:
        outside_repo = True
    return RuntimeStatus(
        db_available=settings.db_path.exists(),
        db_path="external-runtime" if outside_repo else "blocked-inside-repo",
        base_currency=settings.base_currency,
        runtime_outside_repo=outside_repo,
        write_mode=request.app.state.write_mode,
    )


@router.get("/provider/status", response_model=list[ProviderStatus])
def provider_status() -> list[ProviderStatus]:
    # v0 deliberately exposes only sanitized readiness labels, never secret values.
    return [
        ProviderStatus(provider="coingecko", status="unknown", message="Backend-only provider status endpoint placeholder"),
        ProviderStatus(provider="openfigi", status="unknown", message="Backend-only provider status endpoint placeholder"),
    ]
