#!/usr/bin/env python3
"""Import approved exercise figures into the v97 convention-based figure folder.

This is a packaging helper for the manual ChatGPT image workflow. It copies
approved files from an inbox folder into assets/img/exercises/figures and updates
image-admin status metadata. It does not generate images.
"""
from __future__ import annotations
import argparse, json, shutil
from datetime import datetime, timezone
from pathlib import Path


def read_status(path: Path) -> dict:
    if path.exists():
        return json.loads(path.read_text(encoding="utf-8"))
    return {"version":"v97-image-admin-status","updatedAt":None,"exercises":{}}


def write_status(path: Path, data: dict) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    data["updatedAt"] = datetime.now(timezone.utc).isoformat()
    path.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")


def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--from", dest="src", default="incoming/approved-figures")
    ap.add_argument("--to", dest="dst", default="assets/img/exercises/figures")
    ap.add_argument("--status", default="assets/data/image-admin/status.json")
    ap.add_argument("--template", default="next-athlete-blond-b")
    ap.add_argument("--dry-run", action="store_true")
    args = ap.parse_args()

    src = Path(args.src)
    dst = Path(args.dst)
    status_path = Path(args.status)
    if not src.exists():
        raise SystemExit(f"Inbox not found: {src}")
    files = sorted([p for p in src.glob("*.webp") if p.is_file() and not p.name.startswith("_")])
    if not files:
        print(f"No .webp files found in {src}")
        return 0

    status = read_status(status_path)
    status.setdefault("version", "v97-image-admin-status")
    exercises = status.setdefault("exercises", {})
    dst.mkdir(parents=True, exist_ok=True)

    for p in files:
        key = p.stem
        target = dst / f"{key}.webp"
        print(f"IMPORT {p} -> {target}")
        if not args.dry_run:
            shutil.copy2(p, target)
            entry = exercises.setdefault(key, {"exerciseKey": key, "drafts": [], "variants": []})
            entry["status"] = "approved"
            entry["activeVariant"] = args.template
            entry["activePath"] = str(target).replace("\\", "/")
            variants = set(entry.get("variants") or [])
            variants.add(args.template)
            entry["variants"] = sorted(variants)
            entry["approvedAt"] = datetime.now(timezone.utc).isoformat()
            entry["source"] = "manual-chatgpt-batch-import"
    if not args.dry_run:
        write_status(status_path, status)
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
