""" 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"""
Week of {week} · Menu scraped {scraped_at[:10]}