"""Web smoke: routes return 200 and render the seeded fleet + a strategy detail + healthz."""
from __future__ import annotations

import datetime as dt

from fastapi.testclient import TestClient

from fxhnt.adapters.persistence.forward_nav import ForwardNavRepo
from fxhnt.adapters.web.app import create_app
from fxhnt.application.forward_models import ForwardNavRow as Row
from fxhnt.application.forward_models import ForwardSummary


def _client() -> TestClient:
    repo = ForwardNavRepo("sqlite://")
    repo.migrate()
    at = dt.datetime(2026, 6, 14, 23, 30)
    repo.upsert_rows([Row("combined", "2026-06-05", 0.01, 1.01),
                      Row("combined", "2026-06-06", 0.0099, 1.0201)], at)
    repo.upsert_summary(ForwardSummary("combined", "2026-06-06", 2, 1.0201, 0.0201, 1.2, -0.01),
                        "WAIT", "2/20 forward days", at)
    return TestClient(create_app(repo))


def test_healthz() -> None:
    assert _client().get("/healthz").status_code == 200


def test_cockpit_lists_fleet() -> None:
    r = _client().get("/")
    assert r.status_code == 200
    assert "Combined book" in r.text and "WAIT" in r.text


def test_strategy_detail_renders() -> None:
    r = _client().get("/strategy/combined")
    assert r.status_code == 200 and "2026-06-06" in r.text
    assert "weekly" in r.text and "rolling mean" in r.text       # period-aware section present


def test_strategy_detail_unknown_404() -> None:
    assert _client().get("/strategy/nope").status_code == 404


def test_factory_route_ok() -> None:
    assert _client().get("/factory").status_code == 200
