import requests
import json
import time

SUBCATS = {
    "fresh_veg": ["vegetables"],
    "fruits": ["fruits"],
    "dairy_bread_eggs": ["dairies", "breads", "eggs"],
    "meat_fish": ["meats", "fishes"],
    "staples": ["rices", "flours", "legumes"],
    "besan_sattu": ["chickpea-flours"],
    "spices": ["spices"],
    "oil_ghee": ["oils", "ghee"],
    "snacks": ["snacks"],
    "bakery": ["biscuits", "pastries"],
    "beverages": ["beverages"],
    "kitchen_utensils": []
}

NAME_MAP = {
    "fresh_veg": "Fresh Vegetables",
    "fruits": "Fruits",
    "dairy_bread_eggs": "Dairy, Bread & Eggs",
    "meat_fish": "Meat & Fish",
    "staples": "Atta, Rice & Dals",
    "besan_sattu": "Besan & Sattu",
    "spices": "Spices & Masalas",
    "oil_ghee": "Oil & Ghee",
    "snacks": "Snacks & Munchies",
    "bakery": "Bakery & Biscuits",
    "beverages": "Beverages",
    "kitchen_utensils": "Kitchen & Utensils"
}

HEADERS = {"User-Agent": "BuyzzApp/1.0 (test@example.com)"}

products = []
seen_ids = set()

for sub_id, categories in SUBCATS.items():
    for cat in categories:
        url = "https://world.openfoodfacts.org/api/v2/search"
        params = {"categories_tags_en": cat, "page_size": 40, "fields": "code,product_name,image_front_url,image_url,brands,generic_name"}
        data = None
        for attempt in range(4):
            try:
                r = requests.get(url, params=params, headers=HEADERS, timeout=15)
                data = r.json()
                break
            except Exception as e:
                time.sleep(3)
        if data is None:
            print("skip", cat, "failed after retries")
            continue
        for p in data.get("products", []):
            pid = p.get("code")
            name = p.get("product_name")
            image = p.get("image_front_url") or p.get("image_url")
            if not pid or not name or not image or pid in seen_ids:
                continue
            seen_ids.add(pid)
            products.append({
                "id": pid,
                "name": name,
                "image": image,
                "source": "off",
                "brand": p.get("brands", ""),
                "description": p.get("generic_name", ""),
                "sub": NAME_MAP[sub_id],
                "attributes": {}
            })
        print(cat, "done, total so far:", len(products))

with open("groceries.json", "w") as f:
    json.dump({"products": products}, f)

print("TOTAL:", len(products))
