#!/usr/bin/env python3
import argparse
import json
from pathlib import Path


STATES = [
    "idle",
    "sleep",
    "focus",
    "cheer",
    "lowBattery",
    "hide",
    "typing",
    "waitingApproval",
    "celebrate",
    "confused",
    "peekOut",
]


def main() -> None:
    parser = argparse.ArgumentParser(description="Write a Wallive pet.json manifest into a .pet package directory.")
    parser.add_argument("--package-dir", required=True)
    parser.add_argument("--pet-id", required=True)
    parser.add_argument("--pet-name", required=True)
    parser.add_argument("--image-extension", default="webp")
    parser.add_argument("--image-dir", default="states")
    parser.add_argument("--frames", type=int, default=30)
    parser.add_argument("--fps", type=float, default=12)
    parser.add_argument("--frame-width", type=int, default=192)
    parser.add_argument("--frame-height", type=int, default=208)
    args = parser.parse_args()

    package_dir = Path(args.package_dir).expanduser().resolve()
    if package_dir.suffix.lower() != ".pet":
        package_dir = package_dir.with_suffix(".pet")
    package_dir.mkdir(parents=True, exist_ok=True)

    image_dir = args.image_dir.strip().strip("/")
    image_extension = args.image_extension.strip().lstrip(".")
    animations = {
        state: {
            "image": f"{image_dir}/{state}.{image_extension}",
            "frames": args.frames,
            "fps": args.fps,
            "loop": True,
        }
        for state in STATES
    }

    manifest = {
        "schemaVersion": 2,
        "id": args.pet_id.strip(),
        "name": args.pet_name.strip(),
        "frame": {
            "width": args.frame_width,
            "height": args.frame_height,
        },
        "animations": animations,
        "fallback": "idle",
    }

    output = package_dir / "pet.json"
    output.write_text(json.dumps(manifest, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
    print(output)


if __name__ == "__main__":
    main()
