""" Generates a self-contained HTML order form from the latest scraped menu. The form shows this week's meals with quantity selectors, a running total, and submits orders to the backend (local Flask or cloud API Gateway). Usage: python3 generate_form.py # local mode python3 generate_form.py --api-url URL --api-key KEY # cloud mode """ import argparse import json import sys from datetime import datetime from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parents[2] OUTPUT_DIR = PROJECT_ROOT / "output" CONFIG_PATH = PROJECT_ROOT / "config.json" def load_config(): with open(CONFIG_PATH) as f: return json.load(f) def latest_menu() -> dict: files = sorted(OUTPUT_DIR.glob("menu-*.json"), reverse=True) if not files: print("Error: No menu JSON found. Run scrape_menu.py first.", file=sys.stderr) sys.exit(1) with open(files[0]) as f: return json.load(f) def generate_form(menu: dict, config: dict, api_url: str = "", api_key: str = "") -> str: meals_json = json.dumps(menu["meals"]) roster_json = json.dumps(config.get("roster", [])) deadline = config.get("order_deadline", "Thursday 6:00 PM") week = datetime.now().strftime("%Y-W%U") scraped_at = menu.get("scraped_at", "unknown") submit_url = f"{api_url}/api/submit-order" if api_url else "/api/submit-order" status_url = f"{api_url}/api/form-status/{week}" if api_url else "" api_key_json = json.dumps(api_key) return f""" Sea Haven — Meal Order ({week})

Sea Haven Meal Order

Week of {week} · Menu scraped {scraped_at[:10]}

Order deadline: {deadline}
""" def main(): parser = argparse.ArgumentParser(description="Generate meal order form HTML") parser.add_argument("--api-url", default="", help="API Gateway base URL (cloud mode)") parser.add_argument("--api-key", default="", help="API key for order submission (cloud mode)") args = parser.parse_args() config = load_config() menu = latest_menu() html = generate_form(menu, config, api_url=args.api_url, api_key=args.api_key) week = datetime.now().strftime("%Y-W%U") output_file = OUTPUT_DIR / f"order-form-{week}.html" with open(output_file, "w") as f: f.write(html) mode = "cloud" if args.api_url else "local" print(f"Generated order form ({mode} mode): {output_file}") print(f" {menu['meal_count']} meals from menu scraped {menu['scraped_at'][:10]}") if mode == "local": print(f" Start the server with: python3 src/server/app.py") else: print(f" API endpoint: {args.api_url}") if __name__ == "__main__": main()