import requests
import json
import time

SUBCATS = {
    "mobiles_accessories": ["smartphones", "phone-cases"],
    "laptops_computers": ["laptops", "computers"],
    "audio": ["headphones", "speakers"],
    "tv_home_theatre": ["televisions"],
    "cameras": ["cameras"],
    "wearables": ["smartwatches"],
    "gaming": ["video-games", "game-consoles"],
    "computer_accessories": ["computer-mice", "computer-keyboards"],
    "power_chargers": ["power-banks", "phone-chargers"]
}

NAME_MAP = {
    "mobiles_accessories": "Mobiles & Accessories",
    "laptops_computers": "Laptops & Computers",
    "audio": "Audio",
    "tv_home_theatre": "TVs & Home Theatre",
    "cameras": "Cameras",
    "wearables": "Wearables",
    "gaming": "Gaming",
    "computer_accessories": "Computer Accessories",
    "power_chargers": "Power Banks & Chargers"
}

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.openproductsfacts.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": "opf",
                "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("electronics.json", "w") as f:
    json.dump({"products": products}, f)

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