"""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

# Record fields this template anchors as `id-<row id>` (see
# `HumanReportView.anchored_fields`); ids elsewhere land in the ledger.
ANCHORED_FIELDS = (
    "finalVerification.validationEvidence",
    "finalVerification.addedSurfaceAudit",
    "finalVerification.acceptanceBlockers",
    "finalVerification.residualRisk",
    "finalVerdict.conditionalAcceptanceConditions",
)


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,
        "finalVerdict": data["finalVerdict"],
        "final": final,
        "narrative": final["userNarrative"],
        "coverageFigure": figure,
        "releaseAllowed": release_handoff_allowed(data),
        "evidenceIndex": evidence_index(data, ANCHORED_FIELDS),
    }
    return HumanReportView(
        "final-verification",
        "html/tasks/final-verification.template.html",
        context,
        (figure,),
        anchored_fields=ANCHORED_FIELDS,
    )
