import requests
import json
import time

SUBCATS = {
    "building_construction": ["building-toys", "construction-toys"],
    "rc_vehicles": ["remote-controlled-toys", "toy-cars"],
    "soft_toys": ["plush-toys", "stuffed-animals"],
    "dolls_doll_houses": ["dolls", "doll-houses"],
    "educational_stem": ["educational-toys"],
    "outdoor_sports_toys": ["outdoor-toys"],
    "board_games_puzzles": ["board-games", "jigsaw-puzzles"],
    "art_craft": ["craft-kits"],
    "baby_toys": ["baby-toys"]
}

NAME_MAP = {
    "building_construction": "Building & Construction",
    "rc_vehicles": "RC & Vehicles",
    "soft_toys": "Soft Toys",
    "dolls_doll_houses": "Dolls & Doll Houses",
    "educational_stem": "Educational & STEM Toys",
    "outdoor_sports_toys": "Outdoor & Sports Toys",
    "board_games_puzzles": "Board Games & Puzzles",
    "art_craft": "Art & Craft",
    "baby_toys": "Baby Toys"
}

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

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