import requests
import json
import time

SUBCATS = {
    "sofas_seating": ["sofa", "armchair"],
    "beds_mattresses": ["bed frame", "mattress"],
    "tables": ["dining table", "coffee table"],
    "storage_wardrobes": ["wardrobe", "storage cabinet"],
    "chairs": ["chair", "office chair"],
    "bookshelves": ["bookcase"],
    "tv_entertainment_units": ["tv unit", "media console"],
    "outdoor_furniture": ["outdoor furniture"]
}

NAME_MAP = {
    "sofas_seating": "Sofas & Seating",
    "beds_mattresses": "Beds & Mattresses",
    "tables": "Tables",
    "storage_wardrobes": "Storage & Wardrobes",
    "chairs": "Chairs",
    "bookshelves": "Bookshelves",
    "tv_entertainment_units": "TV & Entertainment Units",
    "outdoor_furniture": "Outdoor Furniture"
}

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

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