from __future__ import annotations import argparse import shutil from pathlib import Path from generator.arrange.generate import generate_performance_scores from generator.practice.generate import generate_practice_scores from generator.score import count_json_files, validate_generated_tree from generator.summary import validate_expected_performance_summary, validate_practice_variants def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description="Generate Product Vamp package score assets.") parser.add_argument("--data-dir", type=Path, required=True) parser.add_argument("--output-dir", type=Path, required=True) parser.add_argument("--static-assets-dir", type=Path, default=Path("package/assets")) parser.add_argument("--clean", action="store_true") parser.add_argument("--check", action="store_true") return parser.parse_args() def main() -> int: args = parse_args() data_dir = args.data_dir.resolve() output_dir = args.output_dir.resolve() static_assets_dir = args.static_assets_dir.resolve() if args.clean and output_dir.exists(): shutil.rmtree(output_dir) output_dir.mkdir(parents=True, exist_ok=True) fonts_src = static_assets_dir / "fonts" if fonts_src.exists(): shutil.copytree(fonts_src, output_dir / "fonts", dirs_exist_ok=True) performance_count = generate_performance_scores(data_dir / "songs", output_dir / "songs") practice_count = generate_practice_scores(data_dir / "practice", output_dir / "practice") validate_generated_tree(output_dir) print( "Generated Product Vamp assets: " f"{performance_count} performance scores, " f"{practice_count} practice score variants, " f"{count_json_files(output_dir)} total JSON files." ) if args.check: validate_expected_performance_summary(data_dir / "expected" / "performance_summary.json", output_dir / "songs") validate_practice_variants(output_dir / "practice") print("Generator check passed.") return 0 if __name__ == "__main__": raise SystemExit(main())