#!/usr/bin/env python3
"""Create an immutable new prototype prompt version."""

from __future__ import annotations

import argparse
import json
import shutil
from datetime import date
from pathlib import Path


PROMPTS_DIR = Path(__file__).resolve().parent
MANIFEST_PATH = PROMPTS_DIR / "manifest.json"


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Create a new prototype prompt version.")
    parser.add_argument("--from-version", default=None)
    parser.add_argument("--description", required=True)
    parser.add_argument("--set-current", action="store_true")
    return parser.parse_args()


def main() -> int:
    args = parse_args()
    manifest = json.loads(MANIFEST_PATH.read_text(encoding="utf-8"))
    versions = manifest["versions"]
    source_version = args.from_version or manifest["current_version"]
    if source_version not in versions:
        raise SystemExit(f"Unknown source version: {source_version}")

    highest = max(int(name[1:]) for name in versions if name.startswith("v") and name[1:].isdigit())
    new_version = f"v{highest + 1}"
    source_path = PROMPTS_DIR / versions[source_version]["path"]
    target_relpath = f"versions/{new_version}"
    target_path = PROMPTS_DIR / target_relpath
    shutil.copytree(source_path, target_path)
    versions[new_version] = {
        "path": target_relpath,
        "description": args.description,
        "copied_from": source_version,
        "created_at": str(date.today()),
    }
    if args.set_current:
        manifest["current_version"] = new_version
    MANIFEST_PATH.write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
    print(new_version)
    return 0


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