"""Command-line entry point for the roster formatter.""" from __future__ import annotations import argparse from pathlib import Path from roster_formatter import ( BASE_DIR, LayoutSettings, RosterFormatError, RosterPeriod, format_roster, ) def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description="Generate a formatted roster PNG") parser.add_argument( "--input", type=Path, default=BASE_DIR / "input" / "original.pdf", help="one-page landscape Letter roster PDF", ) parser.add_argument( "--output-dir", type=Path, default=BASE_DIR / "output", help="directory for the formatted PNG", ) parser.add_argument( "--month", help="override the month/year label (for example, 'September 2026' or '2026-09')", ) advanced = parser.add_argument_group("advanced layout adjustments") advanced.add_argument("--content-shift", type=float, default=100) advanced.add_argument("--bottom-margin", type=float, default=60) advanced.add_argument("--logo-x", type=float, default=50) advanced.add_argument("--logo-y", type=float, default=-10) advanced.add_argument("--logo-scale", type=float, default=0.27) advanced.add_argument("--date-x", type=float, default=460) advanced.add_argument("--date-y", type=float, default=88) advanced.add_argument("--date-font-size", type=int, default=48) return parser def main() -> int: args = build_parser().parse_args() try: period = RosterPeriod.parse(args.month) settings = LayoutSettings( content_shift=args.content_shift, bottom_margin=args.bottom_margin, logo_x=args.logo_x, logo_y=args.logo_y, logo_scale=args.logo_scale, date_x=args.date_x, date_y=args.date_y, date_font_size=args.date_font_size, ) output_path = args.output_dir / period.output_filename result = format_roster(args.input, output_path, period, settings) except RosterFormatError as exc: raise SystemExit(f"error: {exc}") from exc print(f"Created {result.path}") return 0 if __name__ == "__main__": raise SystemExit(main())