"""Validate references and required files in the generated speech workspace."""

import json
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1] / "content" / "speech"
plan = json.loads((ROOT / "plan" / "content-plan.json").read_text(encoding="utf-8"))
errors: list[str] = []

for collection, field in [("languages", "code"), ("levels", "number"), ("capabilities", "key"), ("nodes", "key"), ("concepts", "key")]:
    keys = [str(item[field]) for item in plan[collection]]
    if len(keys) != len(set(keys)):
        errors.append(f"Duplicate key in {collection}")

capabilities = {item["key"] for item in plan["capabilities"]}
levels = {item["number"] for item in plan["levels"]}
for node in plan["nodes"]:
    if node["capability"] not in capabilities:
        errors.append(f"Unknown capability on {node['key']}: {node['capability']}")
    if node["level"] not in levels:
        errors.append(f"Unknown level on {node['key']}: {node['level']}")
    base = ROOT / "capabilities" / node["capability"] / "nodes" / f"l{node['level']:02d}_{node['key']}"
    for file in ["instruction.txt", "node.json", "concept-links.json", "status.json", "text/instruction.txt", "games/instruction.txt", "videos/instruction.txt", "activities/instruction.txt"]:
        if not (base / file).is_file():
            errors.append(f"Missing node file: {base / file}")

for concept in plan["concepts"]:
    base = ROOT / "concepts" / Path(*concept["category"].split(".")) / concept["key"]
    for file in ["instruction.txt", "concept.json", "status.json", "images/instruction.txt", "text/instruction.txt", "audio/instruction.txt", "videos/instruction.txt", "games/instruction.txt", "qa/instruction.txt"]:
        if not (base / file).is_file():
            errors.append(f"Missing concept file: {base / file}")
    for lang in plan["languages"]:
        for file in ["instruction.txt", "text.json", "audio/instruction.txt", "audio/assets.csv"]:
            path = base / "locales" / lang["code"] / file
            if not path.is_file():
                errors.append(f"Missing locale file: {path}")

if errors:
    print("\n".join(errors), file=sys.stderr)
    raise SystemExit(1)
print(f"Validated {len(plan['capabilities'])} capabilities, {len(plan['nodes'])} nodes, {len(plan['concepts'])} concepts and {len(plan['languages'])} languages.")

