#!/usr/bin/env python3
"""Read-only local inventory for the official ComfyUI Wan 5B template.

Does not install software, download models, generate video or contact a service.
Run: python3 check-local-video-setup.py --models-dir /path/to/ComfyUI/models
"""

import argparse
import importlib.util
import json
import platform
from pathlib import Path

REQUIRED = {
    "diffusion": "diffusion_models/wan2.2_ti2v_5B_fp16.safetensors",
    "text_encoder": "text_encoders/umt5_xxl_fp8_e4m3fn_scaled.safetensors",
    "vae": "vae/wan2.2_vae.safetensors",
}


def inspect_models(root):
    result = {}
    for role, relative in REQUIRED.items():
        file = root / relative
        exists = file.is_file()
        size = file.stat().st_size if exists else 0
        result[role] = {
            "relative_path": relative,
            "present": exists,
            "bytes": size,
            "nonempty": exists and size > 0,
        }
    return result


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--models-dir", type=Path, required=True)
    args = parser.parse_args()
    models = inspect_models(args.models_dir)
    backend = {"torch_installed": importlib.util.find_spec("torch") is not None}
    if backend["torch_installed"]:
        try:
            import torch

            backend.update(
                {
                    "torch_version": torch.__version__,
                    "cuda_available": torch.cuda.is_available(),
                    "mps_available": bool(
                        getattr(torch.backends, "mps", None) and torch.backends.mps.is_available()
                    ),
                }
            )
            if backend["cuda_available"]:
                backend["gpu_memory_bytes"] = torch.cuda.get_device_properties(0).total_memory
        except Exception as error:
            backend["inspection_error"] = type(error).__name__
    print(
        json.dumps(
            {
                "platform": platform.system(),
                "architecture": platform.machine(),
                "python": platform.python_version(),
                "models": models,
                "all_required_files_nonempty": all(item["nonempty"] for item in models.values()),
                "backend": backend,
                "scope": "Inventory only. File presence does not verify hashes, compatibility, offline operation, available memory or successful inference. Run the official template and a disconnected test separately.",
            },
            indent=2,
        )
    )


if __name__ == "__main__":
    main()
