"""Validate machine-translation coverage without asserting linguistic approval."""

import csv
import json
import re
from collections import Counter
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"))
SCRIPTS = {
    "hi": r"[\u0900-\u097f]", "mr": r"[\u0900-\u097f]",
    "ta": r"[\u0b80-\u0bff]", "te": r"[\u0c00-\u0c7f]",
    "kn": r"[\u0c80-\u0cff]", "ml": r"[\u0d00-\u0d7f]",
    "bn": r"[\u0980-\u09ff]",
}
errors = []
counts = Counter()
for concept in PLAN["concepts"]:
    base = ROOT / "concepts" / Path(*concept["category"].split(".")) / concept["key"] / "locales"
    for code in SCRIPTS:
        package = json.loads((base / code / "translation-package.json").read_text(encoding="utf-8"))
        counts[code] += 1
        target = package["target_content"]
        pairs = [(package["english_reference"]["preferred_label"], target["preferred_term"])]
        pairs += [(x["source_meaning_en"], x["target_text"]) for x in target["expressions"]]
        pairs += [(x["source_meaning_en"], x["target_text"]) for x in target["caregiver_directions"]]
        if package["review"]["status"] != "machine_translation_draft_needs_native_review":
            errors.append(f"{concept['key']}.{code}: incorrect review status")
        for source, translated in pairs:
            if not translated:
                errors.append(f"{concept['key']}.{code}: blank translation")
                continue
            if set(re.findall(r"\{[^{}]+\}", source or "")) != set(re.findall(r"\{[^{}]+\}", translated)):
                errors.append(f"{concept['key']}.{code}: placeholder mismatch: {source}")
        if target["preferred_term"] and not re.search(SCRIPTS[code], target["preferred_term"]):
            errors.append(f"{concept['key']}.{code}: preferred term lacks target script")

with (ROOT / "tracking" / "translation-queue.csv").open(encoding="utf-8", newline="") as stream:
    queue = list(csv.DictReader(stream))
status_counts = Counter(row["translation_status"] for row in queue)
if len(queue) != 480:
    errors.append(f"translation queue has {len(queue)} rows, expected 480")
if status_counts["machine_translation_draft_needs_native_review"] != 420:
    errors.append("translation queue does not contain 420 machine drafts")
if status_counts["english_source_review_required"] != 60:
    errors.append("translation queue does not contain 60 English review items")

if errors:
    print("Translation draft validation FAILED")
    print("\n".join(errors[:100]))
    raise SystemExit(1)
print(f"Translation draft validation passed: {sum(counts.values())} non-English packages; {dict(counts)}")
print(f"Queue statuses: {dict(status_counts)}")
