import requests
import json
import time

SUBCATS = {
    "living_room": ["living room decor", "throw pillow"],
    "bedroom_decor": ["bedroom decor", "bedding set"],
    "storage_organization": ["storage box", "organizer"],
    "lighting": ["table lamp", "floor lamp"],
    "wall_decor": ["wall art", "picture frame"],
    "curtains_rugs": ["curtains", "rug"],
    "kitchen_dining_decor": ["dinnerware", "kitchen decor"],
    "plants_planters": ["artificial plant", "plant pot"],
    "candles_fragrance": ["scented candle"]
}

NAME_MAP = {
    "living_room": "Living Room",
    "bedroom_decor": "Bedroom Decor",
    "storage_organization": "Storage & Organization",
    "lighting": "Lighting",
    "wall_decor": "Wall Decor",
    "curtains_rugs": "Curtains & Rugs",
    "kitchen_dining_decor": "Kitchen & Dining Decor",
    "plants_planters": "Plants & Planters",
    "candles_fragrance": "Candles & Fragrance"
}

HEADERS = {"User-Agent": "Mozilla/5.0"}

products = []
seen_ids = set()

for sub_id, queries in SUBCATS.items():
    for q in queries:
        url = "https://sik.search.blue.cdtapps.com/us/en/search-result-page"
        params = {"q": q}
        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", q, "failed after retries")
            continue
        try:
            items = data["searchResultPage"]["products"]["main"]["items"]
        except Exception:
            print("skip", q, "no items key")
            continue
        for it in items[:25]:
            p = it.get("product", {})
            pid = it.get("metadata", "").split(";")[3] if len(it.get("metadata", "").split(";")) > 3 else None
            name = p.get("name")
            image = p.get("mainImageUrl")
            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 + " " + p.get("typeName", ""),
                "image": image,
                "source": "ikea",
                "brand": "IKEA",
                "description": p.get("typeName", ""),
                "sub": NAME_MAP[sub_id],
                "attributes": {}
            })
        print(q, "done, total so far:", len(products))
        time.sleep(1)

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

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