"""Human-first improvement-discovery view model."""
from __future__ import annotations

from ..common import evidence_index
from ..models import HumanReportView, VisualNode
from ..visualizations import matrix_figure


def _candidate_nodes(improvement: dict) -> tuple[VisualNode, ...]:
    return tuple(
        VisualNode(
            row["id"],
            row["title"],
            f"effort-{row['effort']}",
            row["severity"],
            row["expectedBehaviorAfter"],
        )
        for row in improvement.get("candidates", [])
    )


def build_improvement_discovery_view(data: dict) -> HumanReportView:
    improvement = data["improvementDiscovery"]
    figure = matrix_figure(
        items=_candidate_nodes(improvement),
        title="Candidate impact and effort",
        x_label="effort",
        y_label="severity",
    )
    context = {
        "humanSummary": data["humanSummary"],
        "improvement": improvement,
        "narrative": improvement["userNarrative"],
        "matrixFigure": figure,
        "evidenceIndex": evidence_index(data),
    }
    return HumanReportView(
        "improvement-discovery",
        "html/tasks/improvement-discovery.template.html",
        context,
        (figure,),
    )
