"""Human-first final-verification view model."""
from __future__ import annotations

from ...release_gate import release_handoff_allowed
from ..common import evidence_index
from ..models import HumanReportView, VisualNode
from ..visualizations import coverage_figure


def _coverage_nodes(final: dict) -> tuple[VisualNode, ...]:
    return tuple(
        VisualNode(
            row["id"],
            row["requirement"],
            "requirement",
            row["status"],
            row["artifact"],
            note=row["status"],
        )
        for row in final["validationEvidence"]
    )


def build_final_verification_view(data: dict) -> HumanReportView:
    final = data["finalVerification"]
    figure = coverage_figure(
        rows=_coverage_nodes(final), title="Requirement verification coverage"
    )
    verdict_token = data["finalVerdict"]["verdictToken"]
    context = {
        "humanSummary": data["humanSummary"],
        "verdict": data["verdictCard"],
        "verdictToken": verdict_token,
        "final": final,
        "narrative": final["userNarrative"],
        "coverageFigure": figure,
        "releaseAllowed": release_handoff_allowed(data),
        "evidenceIndex": evidence_index(data),
    }
    return HumanReportView(
        "final-verification",
        "html/tasks/final-verification.template.html",
        context,
        (figure,),
    )
