#!/usr/bin/env python3
"""Post-process Vietnamese fields in questions.json using Azure glossary rules."""
from __future__ import annotations

import argparse
import json
import sys
from datetime import datetime, timezone
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
SCRIPTS = Path(__file__).resolve().parent
if str(SCRIPTS) not in sys.path:
    sys.path.insert(0, str(SCRIPTS))

from azure_vi_glossary import improve_bilingual, walk_bilingual_fields
from exam_config import get_profile


def main() -> int:
    parser = argparse.ArgumentParser(description="Improve vi translations for an exam")
    parser.add_argument("--exam", default="az-104")
    parser.add_argument("--ids", type=str, help="Comma-separated question ids")
    parser.add_argument("--dry-run", action="store_true")
    args = parser.parse_args()

    profile = get_profile(args.exam)
    path = profile.questions_json
    questions = json.loads(path.read_text(encoding="utf-8"))
    id_filter = {x.strip() for x in args.ids.split(",")} if args.ids else None

    touched = 0
    fields_changed = 0
    for q in questions:
        if id_filter and str(q["id"]) not in id_filter:
            continue
        if q.get("exam", "").upper() != profile.code.upper():
            continue
        before = json.dumps(q, ensure_ascii=False)
        if walk_bilingual_fields(q, improve_bilingual):
            fields_changed += 1
            if not args.dry_run:
                q.setdefault("meta", {})["viImprovedAt"] = datetime.now(
                    timezone.utc
                ).isoformat()
        if json.dumps(q, ensure_ascii=False) != before:
            touched += 1

    if args.dry_run:
        print(f"Dry run: would update {touched} questions ({fields_changed} with vi changes)")
        return 0

    path.write_text(json.dumps(questions, ensure_ascii=False, indent=2), encoding="utf-8")
    print(f"Updated {touched} questions ({fields_changed} with vi field changes) -> {path}")
    return 0


if __name__ == "__main__":
    sys.exit(main())
