import csv, json, sys

menu = json.load(open(sys.argv[1], encoding="utf-8"))
rows = []

def groups_text(groups):
    out = []
    for g in groups or []:
        opts = ", ".join(
            f"{o.get('name')} (+{o.get('price', 0):.2f})" for o in g.get("options") or []
        )
        rule = f"min {g.get('force_min', 0)} / max {g.get('force_max', 0)}"
        out.append(f"{g.get('name')} [{rule}]: {opts}")
    return " | ".join(out)

for cat in menu.get("categories", []):
    for item in cat.get("items", []):
        extras = item.get("extras") or {}
        allergens = ", ".join(
            a.get("name", "") for a in extras.get("menu_item_allergens_values") or []
        )
        sizes = item.get("sizes") or [{"name": "", "price": None, "groups": []}]
        for size in sizes:
            rows.append({
                "category": cat.get("name"),
                "item": item.get("name"),
                "description": item.get("description") or "",
                "size": size.get("name") or "",
                "base_price": item.get("price"),
                "size_price": size.get("price"),
                "tags": ", ".join(item.get("tags") or []),
                "allergens": allergens,
                "option_groups": " | ".join(filter(None, [
                    groups_text(cat.get("groups")),
                    groups_text(item.get("groups")),
                    groups_text(size.get("groups")),
                ])),
            })

with open("menu.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.DictWriter(f, fieldnames=list(rows[0].keys()) if rows else ["category"])
    w.writeheader()
    w.writerows(rows)
print(f"Wrote {len(rows)} rows to menu.csv")
