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

from ..common import evidence_index
from ..models import HumanReportView, VisualEdge, VisualNode
from ..visualizations import decision_flow_figure


def _routing_figure(data: dict, requirements: dict):
    current = data["header"]["taskKey"]
    nodes = {
        current: VisualNode(
            current,
            "Current requirements task",
            "current",
            "active",
            requirements["systemInterpretation"],
            note="This task",
        )
    }
    edges = []
    for row in requirements.get("taskDependencies", []):
        source = row["fromTaskKey"]
        target = row["toTaskKey"]
        nodes.setdefault(
            source,
            VisualNode(source, source, "current", "active", row["relation"], note="This task"),
        )
        nodes.setdefault(
            target,
            VisualNode(target, target, "next", "pending", row["relation"], note="Next task"),
        )
        edges.append(VisualEdge(source, target, row["relation"], "dependency"))
    return decision_flow_figure(
        nodes=tuple(nodes.values()),
        edges=tuple(edges),
        title="Requirement routing and task dependencies",
    )


def build_requirements_discovery_view(data: dict) -> HumanReportView:
    requirements = data["requirementsDiscovery"]
    figure = _routing_figure(data, requirements)
    context = {
        "humanSummary": data["humanSummary"],
        "requirements": requirements,
        "narrative": requirements["userNarrative"],
        "routingFigure": figure,
        "clarificationItems": data.get("clarificationItems", []),
        "evidenceIndex": evidence_index(data),
    }
    return HumanReportView(
        "requirements-discovery",
        "html/tasks/requirements-discovery.template.html",
        context,
        (figure,),
    )
