#!/usr/bin/env python3
from __future__ import annotations

import argparse
import json
import sys
from pathlib import Path


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

from services.pet_builder.photo_generation_worker import build_pet_package_from_photos


def main() -> int:
    parser = argparse.ArgumentParser(description="Build a P0 memorial desktop pet package from authorized photos.")
    parser.add_argument("--pet-name", required=True)
    parser.add_argument("--notes", default="")
    parser.add_argument("--photo", action="append", required=True, help="Authorized local photo path. Repeatable.")
    parser.add_argument("--output", default=str(ROOT / "outputs" / "pet_builds"))
    parser.add_argument("--candidates-per-frame", type=int, default=1)
    parser.add_argument("--resume-build-dir", default=None, help="Existing partial build directory to resume.")
    args = parser.parse_args()

    build_dir = build_pet_package_from_photos(
        pet_name=args.pet_name,
        notes=args.notes,
        photo_paths=[Path(path) for path in args.photo],
        output_root=Path(args.output),
        candidates_per_frame=args.candidates_per_frame,
        resume_build_dir=Path(args.resume_build_dir) if args.resume_build_dir else None,
    )
    resolved_build = build_dir.resolve()
    try:
        build_dir_out = str(resolved_build.relative_to(ROOT))
    except ValueError:
        build_dir_out = str(build_dir)
    manifest = json.loads((build_dir / "manifest.json").read_text(encoding="utf-8"))
    print(
        json.dumps(
            {
                "status": "ok",
                "build_dir": build_dir_out,
                "manifest": "manifest.json",
                "validation": "validation.json",
                "contact_sheet": "qa/contact-sheet.png",
                "contact_sheet_html": "qa/contact-sheet.html",
                "previews": "qa/previews",
                "review": "qa/review.json",
                "package": "package/pet.json",
                "spritesheet": manifest["spritesheet_path"],
                "asset_style": manifest["source"].get("asset_style"),
            },
            ensure_ascii=False,
            indent=2,
        )
    )
    return 0


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