from __future__ import annotations

from sqlite3 import Connection

from fastapi import APIRouter, Depends, HTTPException

from jarvis_finance.api.dependencies import get_db
from jarvis_finance.api.schemas.overview import PortfolioSummary
from jarvis_finance.api.schemas.portfolio_advisor import PortfolioAdvisorSnapshot
from jarvis_finance.api.schemas.reconciliation import ReconciliationSnapshotResponse
from jarvis_finance.services.portfolio_service import get_overview
from jarvis_finance.services.portfolio_advisor import get_portfolio_advisor_snapshot
from jarvis_finance.services.reconciliation_snapshot import build_reconciliation_snapshot
from jarvis_finance.services.finance_command_center import build_finance_command_center

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


@router.get("/overview/finance-command-center")
def finance_command_center(month: str | None = None, conn: Connection = Depends(get_db)) -> dict:
    try:
        return build_finance_command_center(conn, month=month)
    except ValueError as exc:
        raise HTTPException(status_code=400, detail=str(exc)) from exc


@router.get("/overview", response_model=PortfolioSummary)
def overview(conn: Connection = Depends(get_db)) -> PortfolioSummary:
    return get_overview(conn)


@router.get("/portfolio/reconciliation-snapshot", response_model=ReconciliationSnapshotResponse)
def reconciliation_snapshot(conn: Connection = Depends(get_db)) -> ReconciliationSnapshotResponse:
    """Read-only local quality view; it never imports, corrects, or confirms data."""
    return ReconciliationSnapshotResponse.model_validate(build_reconciliation_snapshot(conn))


@router.get("/portfolio/advisor", response_model=PortfolioAdvisorSnapshot)
def portfolio_advisor(conn: Connection = Depends(get_db)) -> PortfolioAdvisorSnapshot:
    return get_portfolio_advisor_snapshot(conn)
