import json
from collections import defaultdict

# JSON wygenerowany przez AI
json_data = """
{
  "1. Śniadanie": [
    {"item": "mleko", "qty": 210, "unit": "g"},
    {"item": "masło", "qty": 120, "unit": "g"},
    {"item": "drożdże", "qty": 15, "unit": "g"},
    {"item": "cukru", "qty": 1, "unit": "łyżeczka"},
    {"item": "mąki pszennej", "qty": 450, "unit": "g"},
    {"item": "sol", "qty": 1, "unit": "łyżeczka"},
    {"item": "ziarna", "qty": 6, "unit": "łyżek"},
    {"item": "jajko", "qty": 1, "unit": "szt."},
    {"item": "koper", "qty": 6, "unit": "gałązek"},
    {"item": "sałata lodowa", "qty": 4, "unit": "liści"},
    {"item": "łosoś", "qty": 300, "unit": "g"},
    {"item": "ogórki", "qty": 100, "unit": "g"},
    {"item": "rzodkiewki", "qty": 80, "unit": "g"},
    {"item": "awokado", "qty": 1, "unit": "szt."},
    {"item": "ser kremowy", "qty": 100, "unit": "g"},
    {"item": "szczypiorek", "qty": 2, "unit": "łyżek"},
    {"item": "sól", "qty": 0.25, "unit": "łyżeczki"},
    {"item": "pieprz", "qty": 2, "unit": "szczypty"}
  ],
  "2. II Śniadanie": [
    {"item": "koperek włoski", "qty": 2, "unit": "łyżeczki"},
    {"item": "płatki chili", "qty": 1, "unit": "łyżeczka"},
    {"item": "ser parmezan", "qty": 100, "unit": "g"},
    {"item": "mąka pszenna", "qty": 150, "unit": "g"},
    {"item": "masło", "qty": 100, "unit": "g"},
    {"item": "żółtko", "qty": 1, "unit": "szt."},
    {"item": "sól", "qty": 2, "unit": "szczypty"},
    {"item": "jajko", "qty": 1, "unit": "szt."},
    {"item": "sól morska", "qty": 0, "unit": "g"}
  ],
  "3. Obiad": [
    {"item": "orzeszki piniowe", "qty": 50, "unit": "g"},
    {"item": "migdały", "qty": 50, "unit": "g"},
    {"item": "oliwa z oliwek", "qty": 40, "unit": "g"},
    {"item": "mięso mielone", "qty": 300, "unit": "g"},
    {"item": "cynamon", "qty": 0.25, "unit": "łyżeczki"},
    {"item": "gałka muszkatołowa", "qty": 0.25, "unit": "łyżeczki"},
    {"item": "sól", "qty": 0.5, "unit": "łyżeczki"},
    {"item": "pieprz", "qty": 0.25, "unit": "łyżeczki"},
    {"item": "rodzynki", "qty": 80, "unit": "g"},
    {"item": "śliwki suszone", "qty": 80, "unit": "g"},
    {"item": "bułka tartą", "qty": 30, "unit": "g"},
    {"item": "jajka", "qty": 2, "unit": "szt."},
    {"item": "tuszka kurczaka", "qty": 1, "unit": "szt."},
    {"item": "sól", "qty": 1.5, "unit": "łyżeczki"},
    {"item": "pieprz", "qty": 0.5, "unit": "łyżeczki"},
    {"item": "papryka słodka", "qty": 1, "unit": "łyżeczka"},
    {"item": "oregano", "qty": 2, "unit": "łyżeczki"},
    {"item": "cebula", "qty": 300, "unit": "g"},
    {"item": "masło", "qty": 40, "unit": "g"},
    {"item": "oliwa z oliwek", "qty": 20, "unit": "g"},
    {"item": "wino białe", "qty": 360, "unit": "g"},
    {"item": "woda", "qty": 200, "unit": "g"},
    {"item": "sól", "qty": 0.5, "unit": "łyżeczki"},
    {"item": "cukier", "qty": 1, "unit": "łyżeczka"},
    {"item": "oliwa z oliwek", "qty": 0, "unit": "g"}
  ],
  "4. Podwieczorek": [
    {"item": "rzodkiewki", "qty": 1, "unit": "pęczek"},
    {"item": "sól", "qty": 5, "unit": "szczypt"},
    {"item": "śmietana", "qty": 200, "unit": "g"},
    {"item": "mleko", "qty": 120, "unit": "g"},
    {"item": "koncentrat bulionu", "qty": 1, "unit": "łyżeczka"},
    {"item": "pieprz", "qty": 2, "unit": "szczypty"},
    {"item": "agar", "qty": 1, "unit": "płaska łyżeczka"},
    {"item": "ser kozie", "qty": 100, "unit": "g"},
    {"item": "jogurt grecki", "qty": 50, "unit": "g"}
  ],
  "5. Kolacja": [
    {"item": "rzodkiewki", "qty": 1, "unit": "pęczek"},
    {"item": "sól", "qty": 5, "unit": "szczypt"},
    {"item": "śmietana", "qty": 200, "unit": "g"},
    {"item": "mleko", "qty": 120, "unit": "g"},
    {"item": "koncentrat bulionu", "qty": 1, "unit": "łyżeczka"},
    {"item": "pieprz", "qty": 2, "unit": "szczypty"},
    {"item": "agar", "qty": 1, "unit": "płaska łyżeczka"},
    {"item": "ser kozie", "qty": 100, "unit": "g"},
    {"item": "jogurt grecki", "qty": 50, "unit": "g"}
  ]
}
"""

def normalize_unit(u):
    u = u.lower().strip().replace(".", "")
    if "ząb" in u: return "ząbek"
    if "łyżeczk" in u: return "łyżeczka"
    if "łyżk" in u: return "łyżka"
    if u in ["szt", "sztuka", "sztuki"]: return "szt"
    if u in ["g", "gram", "gramów"]: return "g"
    return u

def normalize_name(n):
    n = n.lower().strip()
    # Mapowanie liczby mnogiej na pojedynczą (synonimy)
    synonyms = {
        "jajka": "jajko",
        "ziemniaki": "ziemniak",
        "ząbki czosnku": "czosnek",
        "ząbek czosnku": "czosnek",
        "filety z piersi kurczaka": "filet z piersi kurczaka"
    }
    return synonyms.get(n, n)

data = json.loads(json_data)
shopping_list = defaultdict(lambda: defaultdict(float))

for meal_name, ingredients in data.items():
    for item in ingredients:
        name = normalize_name(item['item'])
        unit = normalize_unit(item['unit'])
        qty = item['qty']
        shopping_list[name][unit] += qty


# Wyświetlanie jako lista Markdown do odhaczenia
print("## Lista Zakupów\n")

for product, units in sorted(shopping_list.items()):
    details = []
    for unit, total in units.items():
        if total == 0:
            # Obsługa produktów bez konkretnej ilości (np. "do natłuszczenia")
            details.append(f"wg uznania ({unit})")
        else:
            # Formatowanie liczby: usuwamy .0 jeśli to liczba całkowita
            qty_str = f"{int(total)}" if total.is_integer() else f"{round(total, 2)}"
            details.append(f"{qty_str} {unit}")

    # Formatowanie linii Markdown: - [ ] Produkt: ilość, ilość
    print(f"- [ ] **{product.capitalize()}**: {', '.join(details)}")


