#!/usr/bin/env python3
import json
import os
import sys
from datetime import datetime, timezone
from pathlib import Path

PROJECT = Path(__file__).resolve().parents[1]
MANIFEST = PROJECT / "script/project-manifest.json"
ALLOWED = {
    "capability_preflight", "story_brief", "architecture", "voice", "story",
    "pronunciation", "tts", "artwork", "intro", "footage", "final",
    "transcode", "publish", "completion", "cleanup",
}
STATES = {"pending", "in_progress", "completed", "blocked"}


def main():
    if len(sys.argv) != 3 or sys.argv[1] not in ALLOWED or sys.argv[2] not in STATES:
        raise SystemExit("usage: update-manifest.py <stage> <pending|in_progress|completed|blocked>")
    stage, state = sys.argv[1:]
    data = json.loads(MANIFEST.read_text(encoding="utf-8"))
    data.setdefault("steps", {})[stage] = state
    data["updated_at"] = datetime.now(timezone.utc).isoformat()
    temp = MANIFEST.with_suffix(".part.json")
    temp.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
    os.replace(temp, MANIFEST)
    print(json.dumps({"verified": True, "stage": stage, "state": state}, ensure_ascii=False))


if __name__ == "__main__":
    main()
