"""
Management command: seed 30 Ghana-based vendors with 10+ products each.

Features:
- 30 vendors across 10 categories (fashion, electronics, watches, shoes, bags,
  jewelry, perfumes, home, beauty, sports)
- 10-15 products per vendor, all priced in GHS
- Real Unsplash images (2-4 per product via the free CDN endpoint)
- VendorSubscription activated for each vendor
- Graceful image fallback if a URL is unavailable
- --clear flag to wipe and re-seed

Usage:
    python manage.py seed_vendors
    python manage.py seed_vendors --clear
"""

import io
import logging
import random
import time
from datetime import timedelta
from typing import Optional

import requests
from django.contrib.auth.models import User
from django.core.files.base import ContentFile
from django.core.management.base import BaseCommand
from django.utils import timezone
from django.utils.text import slugify

from vendors.models import Vendor, VendorProduct, ProductImage, VendorSubscription

logger = logging.getLogger(__name__)

# ── Unsplash image helper ─────────────────────────────────────────────────────
# We use the public CDN endpoint which requires no API key.
# Format: https://images.unsplash.com/photo-{id}?w=800&q=75&auto=format&fit=crop

def unsplash(photo_id: str, w: int = 800) -> str:
    return f"https://images.unsplash.com/photo-{photo_id}?w={w}&q=75&auto=format&fit=crop"


def download_image(url: str, filename: str, retries: int = 2) -> Optional[ContentFile]:
    """Download an image from URL and return a ContentFile, or None on failure."""
    for attempt in range(retries):
        try:
            resp = requests.get(url, timeout=12, headers={"User-Agent": "ACA-Seeder/1.0"})
            if resp.ok and resp.content and len(resp.content) > 1000:
                return ContentFile(resp.content, name=filename)
        except Exception as exc:
            if attempt < retries - 1:
                time.sleep(1)
            else:
                logger.warning("Failed to download %s: %s", url, exc)
    return None


# ─────────────────────────────────────────────────────────────────────────────
# VENDOR DATA — 30 vendors, each with 10-15 products
# Each product has a list of Unsplash photo IDs (2-4 images each)
# ─────────────────────────────────────────────────────────────────────────────

VENDORS = [

    # ══════════════════════════════════════════════════════
    # CATEGORY: WATCHES (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_timehaus",
        "email": "timehaus@aca.demo",
        "store_name": "TimeHaus Accra",
        "description": "Premium timepieces and luxury watches delivered across Ghana.",
        "phone": "+233244001001",
        "address": "Oxford Street, Osu, Accra",
        "products": [
            {
                "name": "Rolex Submariner Date 41mm",
                "price": 98000, "category": "Watches", "brand": "Rolex",
                "desc": "Iconic dive watch with Oystersteel case and Cerachrom bezel. The definitive luxury sports watch.",
                "images": [
                    unsplash("1523170335258-f87a2d362db"),
                    unsplash("1587836374828-e63b9fb94f61"),
                    unsplash("1548171915-e79a6b8b5c16"),
                ],
            },
            {
                "name": "Omega Seamaster Planet Ocean 600M",
                "price": 62000, "category": "Watches", "brand": "Omega",
                "desc": "600M water resistance, co-axial master chronometer movement, ceramic bezel.",
                "images": [
                    unsplash("1511370235399-8f6b64db2e47"),
                    unsplash("1526045612212-70caf35c14df"),
                ],
            },
            {
                "name": "TAG Heuer Carrera Chronograph",
                "price": 36000, "category": "Watches", "brand": "TAG Heuer",
                "desc": "Motorsport-inspired chronograph with sapphire crystal and steel bracelet.",
                "images": [
                    unsplash("1542496658-e33a6d0d50f6"),
                    unsplash("1508057198301-c7de52c94afd"),
                ],
            },
            {
                "name": "Casio G-Shock DW5600E Black",
                "price": 580, "category": "Watches", "brand": "Casio",
                "desc": "Shock-resistant, 200M water resistance, digital display. Built for anything.",
                "images": [
                    unsplash("1612817288484-6f916006741a"),
                    unsplash("1622434641406-a158123450f3"),
                ],
            },
            {
                "name": "Seiko Presage Cocktail Time",
                "price": 4200, "category": "Watches", "brand": "Seiko",
                "desc": "Japanese automatic movement, stunning textured dial inspired by cocktail culture.",
                "images": [
                    unsplash("1524592094714-0f0654e359b1"),
                    unsplash("1547996160-0dce5973df23"),
                ],
            },
            {
                "name": "Tissot PRX Powermatic 80",
                "price": 6900, "category": "Watches", "brand": "Tissot",
                "desc": "Retro-inspired integrated bracelet watch with 80-hour power reserve.",
                "images": [
                    unsplash("1585386959984-a4155224a1ad"),
                    unsplash("1548636878-57d33b3f3a43"),
                ],
            },
            {
                "name": "Orient Bambino Version 2",
                "price": 1850, "category": "Watches", "brand": "Orient",
                "desc": "Classic Japanese automatic with domed mineral crystal and genuine leather strap.",
                "images": [
                    unsplash("1523275335684-37898b6baf30"),
                    unsplash("1508685096489-7aacd43bd3b1"),
                ],
            },
            {
                "name": "Apple Watch Ultra 2 Titanium",
                "price": 8200, "category": "Smartwatches", "brand": "Apple",
                "desc": "Precision dual-frequency GPS, 36-hour battery, titanium case. Built for athletes.",
                "images": [
                    unsplash("1434493789847-2f02dc6ca35d"),
                    unsplash("1551816230-ef5deaed4a26"),
                ],
            },
            {
                "name": "Fossil Gen 6 Hybrid Smartwatch",
                "price": 2300, "category": "Smartwatches", "brand": "Fossil",
                "desc": "Analog dial meets smart notifications. Heart rate, SpO2, GPS via phone.",
                "images": [
                    unsplash("1579586337278-3befd40fd17a"),
                    unsplash("1617625802912-cde586faf8b1"),
                ],
            },
            {
                "name": "Cartier Tank Française",
                "price": 42000, "category": "Watches", "brand": "Cartier",
                "desc": "Timeless rectangular case on a polished stainless steel integrated bracelet.",
                "images": [
                    unsplash("1539874754764-5a96559165b0"),
                    unsplash("1585386959984-a4155224a1ad"),
                ],
            },
            {
                "name": "Citizen Eco-Drive Promaster Diver",
                "price": 3800, "category": "Watches", "brand": "Citizen",
                "desc": "Light-powered Eco-Drive movement, 200M water resistance, rotating bezel.",
                "images": [
                    unsplash("1612817288484-6f916006741a"),
                    unsplash("1508057198301-c7de52c94afd"),
                ],
            },
        ],
    },

    {
        "username": "vendor_chronogh",
        "email": "chronogh@aca.demo",
        "store_name": "Chrono Ghana",
        "description": "Affordable and mid-range watches for the modern Ghanaian professional.",
        "phone": "+233244002002",
        "address": "Ring Road Central, Accra",
        "products": [
            {
                "name": "Seiko 5 Sports SRPD55 Blue",
                "price": 2200, "category": "Watches", "brand": "Seiko",
                "desc": "24-jewel automatic, day/date display, 100M water resistance.",
                "images": [unsplash("1524592094714-0f0654e359b1"), unsplash("1547996160-0dce5973df23")],
            },
            {
                "name": "Longines HydroConquest 39mm",
                "price": 18500, "category": "Watches", "brand": "Longines",
                "desc": "Swiss automatic, ceramic bezel, 300M water resistance, COSC-certified.",
                "images": [unsplash("1523170335258-f87a2d362db"), unsplash("1511370235399-8f6b64db2e47")],
            },
            {
                "name": "Hamilton Khaki Field Auto",
                "price": 8800, "category": "Watches", "brand": "Hamilton",
                "desc": "Military-inspired field watch with Swiss automatic H-10 movement.",
                "images": [unsplash("1508685096489-7aacd43bd3b1"), unsplash("1523275335684-37898b6baf30")],
            },
            {
                "name": "Garmin Forerunner 955 Solar",
                "price": 7500, "category": "Smartwatches", "brand": "Garmin",
                "desc": "Solar-powered GPS running watch, full triathlon tracking, music storage.",
                "images": [unsplash("1551816230-ef5deaed4a26"), unsplash("1434493789847-2f02dc6ca35d")],
            },
            {
                "name": "Samsung Galaxy Watch 6 Classic",
                "price": 3600, "category": "Smartwatches", "brand": "Samsung",
                "desc": "Rotating bezel, ECG, body composition, sleep tracking, LTE.",
                "images": [unsplash("1617625802912-cde586faf8b1"), unsplash("1579586337278-3befd40fd17a")],
            },
            {
                "name": "Casio Edifice Chronograph",
                "price": 1400, "category": "Watches", "brand": "Casio",
                "desc": "Solar-powered multi-band chronograph with lap memory and alarm.",
                "images": [unsplash("1622434641406-a158123450f3"), unsplash("1612817288484-6f916006741a")],
            },
            {
                "name": "Tudor Black Bay 58",
                "price": 38000, "category": "Watches", "brand": "Tudor",
                "desc": "Retro-inspired diver with in-house COSC-certified movement. A modern classic.",
                "images": [unsplash("1526045612212-70caf35c14df"), unsplash("1548171915-e79a6b8b5c16")],
            },
            {
                "name": "Swatch Sistem51 Irony",
                "price": 880, "category": "Watches", "brand": "Swatch",
                "desc": "Swiss automatic, 51-part movement assembled by robot. Fun, affordable luxury.",
                "images": [unsplash("1524592094714-0f0654e359b1"), unsplash("1508685096489-7aacd43bd3b1")],
            },
            {
                "name": "Vostok Amphibia Russian Diver",
                "price": 750, "category": "Watches", "brand": "Vostok",
                "desc": "Soviet-era Russian mechanical diver, 200M WR, self-sealing case design.",
                "images": [unsplash("1587836374828-e63b9fb94f61"), unsplash("1523170335258-f87a2d362db")],
            },
            {
                "name": "Fossil Neutra Minimalist",
                "price": 1100, "category": "Watches", "brand": "Fossil",
                "desc": "Ultra-thin quartz movement, mesh bracelet, minimalist dial. Clean everyday wear.",
                "images": [unsplash("1542496658-e33a6d0d50f6"), unsplash("1585386959984-a4155224a1ad")],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: SHOES (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_solekicks_gh",
        "email": "solekicks@aca.demo",
        "store_name": "SoleKicks Ghana",
        "description": "Authentic sneakers and footwear for men and women. Fast delivery in Accra.",
        "phone": "+233244003003",
        "address": "Spintex Road, Accra",
        "products": [
            {
                "name": "Nike Air Max 90 — Triple White",
                "price": 1350, "category": "Sneakers", "brand": "Nike",
                "desc": "The iconic Air Max with visible heel cushioning. Triple-white colourway, all-occasion wearability.",
                "images": [
                    unsplash("1542291026-7eec264c27ff"),
                    unsplash("1600185365926-3a2ce3cdb9eb"),
                    unsplash("1608231387042-66d1773d3028"),
                ],
            },
            {
                "name": "Adidas Ultraboost Light — Black",
                "price": 1950, "category": "Sneakers", "brand": "Adidas",
                "desc": "BOOST midsole for all-day energy return, Primeknit upper for comfort.",
                "images": [
                    unsplash("1587563871167-1ee9c731aefb"),
                    unsplash("1583744946564-b52d01e7f922"),
                ],
            },
            {
                "name": "New Balance 550 White/Green",
                "price": 1150, "category": "Sneakers", "brand": "New Balance",
                "desc": "Retro basketball silhouette, leather upper, ENCAP midsole. Street-ready comfort.",
                "images": [
                    unsplash("1560769629-975ec94e6a86"),
                    unsplash("1542291026-7eec264c27ff"),
                ],
            },
            {
                "name": "Jordan 1 Retro High OG Chicago",
                "price": 1850, "category": "Sneakers", "brand": "Jordan",
                "desc": "The OG colourway that started the sneaker revolution. Premium leather upper.",
                "images": [
                    unsplash("1600185365926-3a2ce3cdb9eb"),
                    unsplash("1608231387042-66d1773d3028"),
                ],
            },
            {
                "name": "Converse Chuck Taylor 70s Hi",
                "price": 650, "category": "Sneakers", "brand": "Converse",
                "desc": "Premium version of the classic with vintage outsole and padded collar.",
                "images": [
                    unsplash("1494496195158-c3bc97eb63b7"),
                    unsplash("1491553895911-0055eca6402d"),
                ],
            },
            {
                "name": "Puma RS-X Reinvention White",
                "price": 780, "category": "Sneakers", "brand": "Puma",
                "desc": "Bold chunky sole, mixed-textile upper, retro running inspiration.",
                "images": [
                    unsplash("1543508282-6319a3ea2514"),
                    unsplash("1560769629-975ec94e6a86"),
                ],
            },
            {
                "name": "Vans Old Skool Black/White",
                "price": 720, "category": "Sneakers", "brand": "Vans",
                "desc": "The classic side-stripe skate shoe. Canvas and suede upper, waffle sole.",
                "images": [
                    unsplash("1525966222134-fcfa99b8ae77"),
                    unsplash("1491553895911-0055eca6402d"),
                ],
            },
            {
                "name": "Timberland 6-Inch Premium Boot",
                "price": 2050, "category": "Boots", "brand": "Timberland",
                "desc": "Waterproof nubuck leather, padded collar, lug sole. The iconic workwear boot.",
                "images": [
                    unsplash("1605408499391-6368c628ef42"),
                    unsplash("1542291026-7eec264c27ff"),
                ],
            },
            {
                "name": "Birkenstock Arizona Sandal — Tobacco",
                "price": 1020, "category": "Sandals", "brand": "Birkenstock",
                "desc": "Oiled-leather straps, contoured cork-latex footbed, suede lining.",
                "images": [
                    unsplash("1553361371-9b22f78e8b1d"),
                    unsplash("1543508282-6319a3ea2514"),
                ],
            },
            {
                "name": "Dr. Martens 1460 Smooth — Cherry Red",
                "price": 1750, "category": "Boots", "brand": "Dr. Martens",
                "desc": "8-eye smooth leather boot with AirWair air-cushioned sole. Built to last decades.",
                "images": [
                    unsplash("1605408499391-6368c628ef42"),
                    unsplash("1494496195158-c3bc97eb63b7"),
                ],
            },
            {
                "name": "Salomon Speedcross 6 Trail",
                "price": 1480, "category": "Trail Shoes", "brand": "Salomon",
                "desc": "Aggressive Contragrip lug sole, cushioned midsole, quicklace system.",
                "images": [
                    unsplash("1559391374-cf13be4ac794"),
                    unsplash("1587563871167-1ee9c731aefb"),
                ],
            },
        ],
    },

    {
        "username": "vendor_footprint_gh",
        "email": "footprint@aca.demo",
        "store_name": "Footprint Ghana",
        "description": "Formal shoes, loafers, and office-ready footwear for Ghana's professionals.",
        "phone": "+233244004004",
        "address": "Airport City, Accra",
        "products": [
            {
                "name": "Oxford Cap Toe — Black Leather",
                "price": 1250, "category": "Formal Shoes", "brand": "Footprint",
                "desc": "Hand-finished full-grain leather Oxford. Goodyear-welted sole for longevity.",
                "images": [unsplash("1604671801908-6f0c6a092c05"), unsplash("1542291026-7eec264c27ff")],
            },
            {
                "name": "Penny Loafer — Cognac Suede",
                "price": 980, "category": "Loafers", "brand": "Footprint",
                "desc": "Supple suede upper, leather lining, stacked heel. Smart-casual perfection.",
                "images": [unsplash("1553361371-9b22f78e8b1d"), unsplash("1605408499391-6368c628ef42")],
            },
            {
                "name": "Derby Brogue — Tan",
                "price": 1080, "category": "Formal Shoes", "brand": "Footprint",
                "desc": "Wingtip brogue detailing on full-grain leather. Versatile from desk to dinner.",
                "images": [unsplash("1604671801908-6f0c6a092c05"), unsplash("1553361371-9b22f78e8b1d")],
            },
            {
                "name": "Chelsea Boot — Dark Brown",
                "price": 1400, "category": "Boots", "brand": "Footprint",
                "desc": "Elasticated gusset entry, pull tab, stacked leather heel. Office to evening.",
                "images": [unsplash("1605408499391-6368c628ef42"), unsplash("1494496195158-c3bc97eb63b7")],
            },
            {
                "name": "Monk Strap Double Buckle",
                "price": 1180, "category": "Formal Shoes", "brand": "Footprint",
                "desc": "Double monk strap with polished gold-tone hardware on smooth black leather.",
                "images": [unsplash("1604671801908-6f0c6a092c05"), unsplash("1542291026-7eec264c27ff")],
            },
            {
                "name": "Mule Slide — White Leather",
                "price": 620, "category": "Sandals", "brand": "Footprint",
                "desc": "Open-toe backless slide in smooth white leather. Minimalist summer statement.",
                "images": [unsplash("1553361371-9b22f78e8b1d"), unsplash("1543508282-6319a3ea2514")],
            },
            {
                "name": "Running Trainer — Volt Yellow",
                "price": 850, "category": "Sneakers", "brand": "Footprint",
                "desc": "Lightweight mesh upper, EVA midsole, reflective details for evening runs.",
                "images": [unsplash("1559391374-cf13be4ac794"), unsplash("1587563871167-1ee9c731aefb")],
            },
            {
                "name": "Slip-On Canvas — Navy",
                "price": 480, "category": "Casual Shoes", "brand": "Footprint",
                "desc": "Easy pull-on canvas with memory foam insole. All-day errands made comfortable.",
                "images": [unsplash("1525966222134-fcfa99b8ae77"), unsplash("1491553895911-0055eca6402d")],
            },
            {
                "name": "Platform Sandal — Camel",
                "price": 760, "category": "Sandals", "brand": "Footprint",
                "desc": "Block platform sole, ankle strap, padded footbed. Adds height with comfort.",
                "images": [unsplash("1543508282-6319a3ea2514"), unsplash("1553361371-9b22f78e8b1d")],
            },
            {
                "name": "High-Top Basketball — Black",
                "price": 920, "category": "Sneakers", "brand": "Footprint",
                "desc": "Ankle-support high-top, herringbone court rubber, leather toe cap.",
                "images": [unsplash("1600185365926-3a2ce3cdb9eb"), unsplash("1608231387042-66d1773d3028")],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: BAGS (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_bagvault_gh",
        "email": "bagvault@aca.demo",
        "store_name": "BagVault Ghana",
        "description": "Designer and everyday bags — from totes to backpacks. Authentic pieces.",
        "phone": "+233244005005",
        "address": "Cantonments, Accra",
        "products": [
            {
                "name": "Louis Vuitton Neverfull MM Monogram",
                "price": 18500, "category": "Tote Bags", "brand": "Louis Vuitton",
                "desc": "The iconic monogram canvas tote with removable interior pouch. Timeless.",
                "images": [
                    unsplash("1548036161-18c0fd738c60"),
                    unsplash("1547949003-9792a18a2b38"),
                    unsplash("1584917865442-de89df76afd3"),
                ],
            },
            {
                "name": "Gucci Marmont Mini Shoulder Bag",
                "price": 22000, "category": "Shoulder Bags", "brand": "Gucci",
                "desc": "Matelassé leather with Double G hardware. The social-media favourite.",
                "images": [
                    unsplash("1584917865442-de89df76afd3"),
                    unsplash("1548036161-18c0fd738c60"),
                ],
            },
            {
                "name": "Prada Re-Edition 2005 Nylon",
                "price": 9800, "category": "Shoulder Bags", "brand": "Prada",
                "desc": "Recycled nylon, triangular logo plaque, chain-link strap.",
                "images": [
                    unsplash("1547949003-9792a18a2b38"),
                    unsplash("1584917865442-de89df76afd3"),
                ],
            },
            {
                "name": "Coach Tabby Shoulder Bag 26",
                "price": 4100, "category": "Shoulder Bags", "brand": "Coach",
                "desc": "Smooth leather with signature lining, magnetic snap closure.",
                "images": [
                    unsplash("1548036161-18c0fd738c60"),
                    unsplash("1547949003-9792a18a2b38"),
                ],
            },
            {
                "name": "Herschel Little America Backpack",
                "price": 1150, "category": "Backpacks", "brand": "Herschel",
                "desc": "Classic mountaineering-inspired backpack with laptop sleeve and fleece lining.",
                "images": [
                    unsplash("1553062407-98eeb64c6a62"),
                    unsplash("1491637639811-60e2756cc1c7"),
                ],
            },
            {
                "name": "Longchamp Le Pliage — Black",
                "price": 1600, "category": "Tote Bags", "brand": "Longchamp",
                "desc": "Foldable nylon tote with embossed leather flap. Travel-ready and stylish.",
                "images": [
                    unsplash("1584917865442-de89df76afd3"),
                    unsplash("1548036161-18c0fd738c60"),
                ],
            },
            {
                "name": "Tumi Alpha 3 Slim Briefcase",
                "price": 4900, "category": "Briefcases", "brand": "Tumi",
                "desc": "FXT ballistic nylon, padded laptop compartment, add-a-bag sleeve.",
                "images": [
                    unsplash("1553062407-98eeb64c6a62"),
                    unsplash("1491637639811-60e2756cc1c7"),
                ],
            },
            {
                "name": "Nike Brasilia Training Duffel",
                "price": 460, "category": "Duffel Bags", "brand": "Nike",
                "desc": "Polyester duffel with wet/dry compartment, padded strap, shoe pocket.",
                "images": [
                    unsplash("1553062407-98eeb64c6a62"),
                    unsplash("1491637639811-60e2756cc1c7"),
                ],
            },
            {
                "name": "Fjällräven Kånken Classic — Red",
                "price": 820, "category": "Backpacks", "brand": "Fjällräven",
                "desc": "Iconic Swedish backpack in durable Vinylon-F. Shoulder pad included.",
                "images": [
                    unsplash("1491637639811-60e2756cc1c7"),
                    unsplash("1553062407-98eeb64c6a62"),
                ],
            },
            {
                "name": "Bellroy Tokyo Tote Pack",
                "price": 1850, "category": "Backpacks", "brand": "Bellroy",
                "desc": "Recycled fabric, converts tote to backpack, water bottle pocket, 20L capacity.",
                "images": [
                    unsplash("1553062407-98eeb64c6a62"),
                    unsplash("1548036161-18c0fd738c60"),
                ],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: CLOTHING / FASHION (5 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_threadline_gh",
        "email": "threadline@aca.demo",
        "store_name": "ThreadLine Accra",
        "description": "Streetwear to smart-casual clothing for Ghana's fashion-forward.",
        "phone": "+233244006006",
        "address": "East Legon, Accra",
        "products": [
            {
                "name": "Oversized Cotton Graphic Tee — Black",
                "price": 360, "category": "Tops", "brand": "ThreadLine",
                "desc": "220gsm heavyweight cotton, vintage graphic print, dropped shoulders.",
                "images": [
                    unsplash("1521572163474-6864f9cf17ab"),
                    unsplash("1583743814966-8d4f37861531"),
                    unsplash("1558618666-fcd25c85cd64"),
                ],
            },
            {
                "name": "Slim Chino Trousers — Navy",
                "price": 680, "category": "Trousers", "brand": "ThreadLine",
                "desc": "Stretch cotton blend, tapered leg, zip fly with button. Office to street.",
                "images": [
                    unsplash("1624378439575-d8705ad7ae80"),
                    unsplash("1507003211169-0a1dd7228f2d"),
                ],
            },
            {
                "name": "Denim Trucker Jacket — Washed Indigo",
                "price": 1150, "category": "Jackets", "brand": "ThreadLine",
                "desc": "Classic denim jacket with button front, chest pockets, back yoke detail.",
                "images": [
                    unsplash("1551537824-8246af430dc4"),
                    unsplash("1521572163474-6864f9cf17ab"),
                ],
            },
            {
                "name": "Linen Blend Summer Shirt — Sky Blue",
                "price": 580, "category": "Shirts", "brand": "ThreadLine",
                "desc": "Relaxed fit, camp collar, mother-of-pearl buttons. Perfect for Accra heat.",
                "images": [
                    unsplash("1607345366928-199ea26cfe3e"),
                    unsplash("1583743814966-8d4f37861531"),
                ],
            },
            {
                "name": "Cropped Hoodie — Sage Green",
                "price": 600, "category": "Tops", "brand": "ThreadLine",
                "desc": "French terry fleece, kangaroo pocket, ribbed cuffs, relaxed crop length.",
                "images": [
                    unsplash("1583744946564-b52d01e7f922"),
                    unsplash("1521572163474-6864f9cf17ab"),
                ],
            },
            {
                "name": "Wool Blend Overcoat — Camel",
                "price": 2050, "category": "Jackets", "brand": "ThreadLine",
                "desc": "Knee-length overcoat, notch lapels, two-button closure, satin lining.",
                "images": [
                    unsplash("1551537824-8246af430dc4"),
                    unsplash("1607345366928-199ea26cfe3e"),
                ],
            },
            {
                "name": "Ribbed Knit Bodycon Dress — Black",
                "price": 710, "category": "Dresses", "brand": "ThreadLine",
                "desc": "Stretch rib-knit midi dress, mock neck, long sleeves, body-hugging fit.",
                "images": [
                    unsplash("1539109136881-3be0616acf4b"),
                    unsplash("1558618666-fcd25c85cd64"),
                ],
            },
            {
                "name": "Cargo Jogger — Olive Green",
                "price": 520, "category": "Trousers", "brand": "ThreadLine",
                "desc": "Relaxed fit cargo with multiple utility pockets, drawstring waist.",
                "images": [
                    unsplash("1624378439575-d8705ad7ae80"),
                    unsplash("1507003211169-0a1dd7228f2d"),
                ],
            },
            {
                "name": "Biker Leather Jacket — Black",
                "price": 2400, "category": "Jackets", "brand": "ThreadLine",
                "desc": "Genuine lamb leather, asymmetric zip, quilted panels, silver hardware.",
                "images": [
                    unsplash("1551537824-8246af430dc4"),
                    unsplash("1583743814966-8d4f37861531"),
                ],
            },
            {
                "name": "Floral Wrap Midi Dress — Multicolour",
                "price": 750, "category": "Dresses", "brand": "ThreadLine",
                "desc": "Chiffon fabric, V-neck wrap front, tie waist, perfect for garden events.",
                "images": [
                    unsplash("1539109136881-3be0616acf4b"),
                    unsplash("1558618666-fcd25c85cd64"),
                ],
            },
        ],
    },

    {
        "username": "vendor_kente_luxe",
        "email": "kenteluxe@aca.demo",
        "store_name": "Kente Luxe",
        "description": "Authentic Ghanaian kente and Afrocentric fashion for global tastes.",
        "phone": "+233244007007",
        "address": "Kumasi Central Market, Kumasi",
        "products": [
            {
                "name": "Handwoven Kente Stole — Royal Gold",
                "price": 950, "category": "Accessories", "brand": "Kente Luxe",
                "desc": "Hand-woven in Bonwire, traditional Asante kente patterns in 100% silk-cotton blend.",
                "images": [unsplash("1604671801908-6f0c6a092c05"), unsplash("1607345366928-199ea26cfe3e")],
            },
            {
                "name": "Dashiki Embroidered Shirt — Orange",
                "price": 480, "category": "Shirts", "brand": "Kente Luxe",
                "desc": "Relaxed dashiki with embroidered neckline and chest panel. V-neck opening.",
                "images": [unsplash("1583743814966-8d4f37861531"), unsplash("1521572163474-6864f9cf17ab")],
            },
            {
                "name": "Batik Wrap Dress — Earth Tones",
                "price": 680, "category": "Dresses", "brand": "Kente Luxe",
                "desc": "Hand-dyed wax-print batik on 100% cotton. Tie-front wrap with flutter sleeves.",
                "images": [unsplash("1539109136881-3be0616acf4b"), unsplash("1558618666-fcd25c85cd64")],
            },
            {
                "name": "Ankara Print Blazer — Blue/Gold",
                "price": 1200, "category": "Jackets", "brand": "Kente Luxe",
                "desc": "Tailored blazer in bold Ankara print, two-button closure, flap pockets.",
                "images": [unsplash("1551537824-8246af430dc4"), unsplash("1607345366928-199ea26cfe3e")],
            },
            {
                "name": "Boubou Grand Robe — White/Gold",
                "price": 1850, "category": "Traditional Wear", "brand": "Kente Luxe",
                "desc": "Full boubou with embroidered neck and cuffs, matching cap. Wedding-ready.",
                "images": [unsplash("1604671801908-6f0c6a092c05"), unsplash("1583743814966-8d4f37861531")],
            },
            {
                "name": "Smocked Crop Top — Ankara",
                "price": 320, "category": "Tops", "brand": "Kente Luxe",
                "desc": "Elasticated smocked bodice in bold wax-print fabric. Pairs with wide-leg trousers.",
                "images": [unsplash("1521572163474-6864f9cf17ab"), unsplash("1558618666-fcd25c85cd64")],
            },
            {
                "name": "Traditional Fugu Smock — Striped",
                "price": 650, "category": "Traditional Wear", "brand": "Kente Luxe",
                "desc": "Northern Ghana hand-woven smock in natural cotton strips. Cultural heritage.",
                "images": [unsplash("1583743814966-8d4f37861531"), unsplash("1607345366928-199ea26cfe3e")],
            },
            {
                "name": "Kente Head Wrap — Red/Black/Gold",
                "price": 280, "category": "Accessories", "brand": "Kente Luxe",
                "desc": "100% cotton kente strip head wrap, pre-tied style, one-size adjustable.",
                "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1539109136881-3be0616acf4b")],
            },
            {
                "name": "Wax-Print Wide-Leg Trousers",
                "price": 580, "category": "Trousers", "brand": "Kente Luxe",
                "desc": "Flowy wide-leg cut in vibrant wax-print cotton. Elastic waistband.",
                "images": [unsplash("1624378439575-d8705ad7ae80"), unsplash("1507003211169-0a1dd7228f2d")],
            },
            {
                "name": "African Print Bucket Hat",
                "price": 220, "category": "Accessories", "brand": "Kente Luxe",
                "desc": "100% cotton wax-print bucket hat with wide brim and inner sweatband.",
                "images": [unsplash("1583743814966-8d4f37861531"), unsplash("1521572163474-6864f9cf17ab")],
            },
        ],
    },

    {
        "username": "vendor_nkyinkyim",
        "email": "nkyinkyim@aca.demo",
        "store_name": "Nkyinkyim Fashion",
        "description": "Contemporary Ghanaian fashion blending tradition and modern style.",
        "phone": "+233244008008",
        "address": "Labone, Accra",
        "products": [
            {
                "name": "Structured Ankara Pencil Skirt",
                "price": 420, "category": "Skirts", "brand": "Nkyinkyim",
                "desc": "Knee-length pencil cut in bold wax-print. Back slit, concealed zip.",
                "images": [unsplash("1539109136881-3be0616acf4b"), unsplash("1558618666-fcd25c85cd64")],
            },
            {
                "name": "Peplum Blouse — Kente Trim",
                "price": 480, "category": "Tops", "brand": "Nkyinkyim",
                "desc": "White chiffon peplum blouse with kente strip trim at hem and cuffs.",
                "images": [unsplash("1521572163474-6864f9cf17ab"), unsplash("1607345366928-199ea26cfe3e")],
            },
            {
                "name": "Two-Piece Cord Set — Mustard",
                "price": 750, "category": "Co-ords", "brand": "Nkyinkyim",
                "desc": "Corduroy co-ord: crop jacket and high-waist flare trousers. Matching set.",
                "images": [unsplash("1583743814966-8d4f37861531"), unsplash("1624378439575-d8705ad7ae80")],
            },
            {
                "name": "Maxi Halter Dress — Tie-Dye",
                "price": 680, "category": "Dresses", "brand": "Nkyinkyim",
                "desc": "Floor-length halter neck dress in hand-dyed indigo tie-dye cotton.",
                "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1539109136881-3be0616acf4b")],
            },
            {
                "name": "Oversized Linen Shirt — Cream",
                "price": 520, "category": "Shirts", "brand": "Nkyinkyim",
                "desc": "100% linen, dropped shoulders, chest pocket. Breathable for Ghana's climate.",
                "images": [unsplash("1607345366928-199ea26cfe3e"), unsplash("1583743814966-8d4f37861531")],
            },
            {
                "name": "Tailored Suit — Charcoal",
                "price": 2200, "category": "Suits", "brand": "Nkyinkyim",
                "desc": "Two-piece tailored suit, notch lapel, single-button jacket, slim trousers.",
                "images": [unsplash("1507003211169-0a1dd7228f2d"), unsplash("1624378439575-d8705ad7ae80")],
            },
            {
                "name": "Midi Pleated Skirt — Terracotta",
                "price": 380, "category": "Skirts", "brand": "Nkyinkyim",
                "desc": "Accordion-pleat midi in terracotta chiffon. Elasticated waist, floaty movement.",
                "images": [unsplash("1539109136881-3be0616acf4b"), unsplash("1558618666-fcd25c85cd64")],
            },
            {
                "name": "Knit Polo Shirt — Forest Green",
                "price": 460, "category": "Tops", "brand": "Nkyinkyim",
                "desc": "Fine-knit polo with tipping at collar and cuffs. Classic casual.",
                "images": [unsplash("1521572163474-6864f9cf17ab"), unsplash("1558618666-fcd25c85cd64")],
            },
            {
                "name": "Wide-Leg Palazzo — White",
                "price": 560, "category": "Trousers", "brand": "Nkyinkyim",
                "desc": "Ultra-wide palazzo in crinkle-chiffon. Elasticated waist, full floor-length sweep.",
                "images": [unsplash("1624378439575-d8705ad7ae80"), unsplash("1507003211169-0a1dd7228f2d")],
            },
            {
                "name": "Cut-Out Bodysuit — Black",
                "price": 340, "category": "Tops", "brand": "Nkyinkyim",
                "desc": "Stretch jersey bodysuit with strategic cut-outs at waist and back.",
                "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1583743814966-8d4f37861531")],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: JEWELRY (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_goldengate_gh",
        "email": "goldengate@aca.demo",
        "store_name": "Golden Gate Jewelry",
        "description": "Handcrafted gold and silver jewelry from Ghanaian artisans.",
        "phone": "+233244009009",
        "address": "Osu, Accra",
        "products": [
            {
                "name": "18K Gold Chain Necklace 24in",
                "price": 12500, "category": "Necklaces", "brand": "Golden Gate",
                "desc": "Solid 18K yellow gold Cuban link, 6mm width, lobster clasp.",
                "images": [
                    unsplash("1611652022419-a9419f74343d"),
                    unsplash("1602752250015-5c1f68fdef73"),
                    unsplash("1617038220319-276d3cfab638"),
                ],
            },
            {
                "name": "Diamond Solitaire Ring 0.5ct",
                "price": 13800, "category": "Rings", "brand": "Golden Gate",
                "desc": "Round brilliant diamond, VS1 clarity, F colour, 18K white gold setting.",
                "images": [
                    unsplash("1602752250015-5c1f68fdef73"),
                    unsplash("1611652022419-a9419f74343d"),
                ],
            },
            {
                "name": "Pearl Drop Earrings — Gold",
                "price": 980, "category": "Earrings", "brand": "Golden Gate",
                "desc": "Freshwater pearl drops on 14K gold ear wire. 9mm pearls, high lustre.",
                "images": [
                    unsplash("1617038220319-276d3cfab638"),
                    unsplash("1602752250015-5c1f68fdef73"),
                ],
            },
            {
                "name": "Sterling Silver Tennis Bracelet",
                "price": 3200, "category": "Bracelets", "brand": "Golden Gate",
                "desc": "CZ-studded tennis bracelet, 925 sterling silver, box clasp, 7 inches.",
                "images": [
                    unsplash("1611652022419-a9419f74343d"),
                    unsplash("1617038220319-276d3cfab638"),
                ],
            },
            {
                "name": "Gold Hoop Earrings 40mm",
                "price": 1850, "category": "Earrings", "brand": "Golden Gate",
                "desc": "14K yellow gold hoops, polished finish, hinged post closure.",
                "images": [
                    unsplash("1602752250015-5c1f68fdef73"),
                    unsplash("1611652022419-a9419f74343d"),
                ],
            },
            {
                "name": "Sapphire Halo Ring — White Gold",
                "price": 28500, "category": "Rings", "brand": "Golden Gate",
                "desc": "Natural blue sapphire centre, brilliant diamond halo, 18K white gold band.",
                "images": [
                    unsplash("1617038220319-276d3cfab638"),
                    unsplash("1602752250015-5c1f68fdef73"),
                ],
            },
            {
                "name": "Rose Gold Charm Bracelet",
                "price": 1800, "category": "Bracelets", "brand": "Golden Gate",
                "desc": "14K rose gold chain with barrel clasp, comes with 3 signature charms.",
                "images": [
                    unsplash("1611652022419-a9419f74343d"),
                    unsplash("1617038220319-276d3cfab638"),
                ],
            },
            {
                "name": "Men's Onyx Signet Ring",
                "price": 4200, "category": "Rings", "brand": "Golden Gate",
                "desc": "Black onyx in polished sterling silver signet. Classic masculine statement.",
                "images": [
                    unsplash("1602752250015-5c1f68fdef73"),
                    unsplash("1611652022419-a9419f74343d"),
                ],
            },
            {
                "name": "Layered Gold Necklace Set",
                "price": 1400, "category": "Necklaces", "brand": "Golden Gate",
                "desc": "Set of 3 dainty 14K gold-plated chains at 16, 18 and 20 inches.",
                "images": [
                    unsplash("1617038220319-276d3cfab638"),
                    unsplash("1611652022419-a9419f74343d"),
                ],
            },
            {
                "name": "Emerald Cut Green Amethyst Ring",
                "price": 5500, "category": "Rings", "brand": "Golden Gate",
                "desc": "Emerald-cut prasiolite (green amethyst) in 14K yellow gold bezel setting.",
                "images": [
                    unsplash("1602752250015-5c1f68fdef73"),
                    unsplash("1617038220319-276d3cfab638"),
                ],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: PERFUMES (2 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_scentbar_gh",
        "email": "scentbar@aca.demo",
        "store_name": "ScentBar Accra",
        "description": "Luxury and niche perfumes for men and women. 100% authentic.",
        "phone": "+233244010010",
        "address": "Accra Mall, Spintex, Accra",
        "products": [
            {
                "name": "Chanel No.5 EDP 100ml",
                "price": 1700, "category": "Perfumes", "brand": "Chanel",
                "desc": "The iconic floral-aldehyde fragrance. Timeless femininity in every spray.",
                "images": [
                    unsplash("1592945403341-bb006bf47f4e"),
                    unsplash("1541643600914-78b084683702"),
                    unsplash("1588514491908-06795c10d791"),
                ],
            },
            {
                "name": "Dior Sauvage EDT 100ml",
                "price": 1250, "category": "Perfumes", "brand": "Dior",
                "desc": "Fresh and raw masculine scent — Calabrian bergamot, Ambroxan, pepper.",
                "images": [
                    unsplash("1541643600914-78b084683702"),
                    unsplash("1592945403341-bb006bf47f4e"),
                ],
            },
            {
                "name": "Tom Ford Black Orchid EDP 50ml",
                "price": 2950, "category": "Perfumes", "brand": "Tom Ford",
                "desc": "Dark, luxurious unisex fragrance. Black truffle, ylang ylang, dark chocolate.",
                "images": [
                    unsplash("1588514491908-06795c10d791"),
                    unsplash("1592945403341-bb006bf47f4e"),
                ],
            },
            {
                "name": "YSL Libre Intense EDP 90ml",
                "price": 1450, "category": "Perfumes", "brand": "YSL",
                "desc": "Bold, free-spirited feminine. Lavender essence, orange blossom, musk.",
                "images": [
                    unsplash("1592945403341-bb006bf47f4e"),
                    unsplash("1541643600914-78b084683702"),
                ],
            },
            {
                "name": "Creed Aventus EDP 100ml",
                "price": 4500, "category": "Perfumes", "brand": "Creed",
                "desc": "Fruity-smoky masterpiece: pineapple, birch, ambergris, oakmoss. Icon.",
                "images": [
                    unsplash("1588514491908-06795c10d791"),
                    unsplash("1541643600914-78b084683702"),
                ],
            },
            {
                "name": "Jo Malone Wood Sage & Sea Salt",
                "price": 820, "category": "Perfumes", "brand": "Jo Malone",
                "desc": "Earthy-fresh unisex cologne. Ambrette seeds, sea salt, sage accord.",
                "images": [
                    unsplash("1592945403341-bb006bf47f4e"),
                    unsplash("1588514491908-06795c10d791"),
                ],
            },
            {
                "name": "Versace Eros EDT 100ml",
                "price": 980, "category": "Perfumes", "brand": "Versace",
                "desc": "Fresh oriental for men: mint, green apple, vanilla, tonka bean.",
                "images": [
                    unsplash("1541643600914-78b084683702"),
                    unsplash("1592945403341-bb006bf47f4e"),
                ],
            },
            {
                "name": "Maison Margiela Replica Jazz Club",
                "price": 1400, "category": "Perfumes", "brand": "Maison Margiela",
                "desc": "Tobacco, rum, vetiver, pink pepper. Evokes a Brooklyn jazz lounge.",
                "images": [
                    unsplash("1588514491908-06795c10d791"),
                    unsplash("1541643600914-78b084683702"),
                ],
            },
            {
                "name": "Le Labo Santal 33 EDP 50ml",
                "price": 2200, "category": "Perfumes", "brand": "Le Labo",
                "desc": "Cult-favourite unisex sandalwood. Cardamom, leather, violet, cedarwood.",
                "images": [
                    unsplash("1592945403341-bb006bf47f4e"),
                    unsplash("1541643600914-78b084683702"),
                ],
            },
            {
                "name": "Burberry Her EDP 100ml",
                "price": 1100, "category": "Perfumes", "brand": "Burberry",
                "desc": "Fruity floral: juicy berries, jasmine, dry musks. Young, fresh, London.",
                "images": [
                    unsplash("1588514491908-06795c10d791"),
                    unsplash("1592945403341-bb006bf47f4e"),
                ],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: ELECTRONICS (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_techsphere_gh",
        "email": "techsphere@aca.demo",
        "store_name": "TechSphere Electronics",
        "description": "Genuine phones, laptops, headphones, and smart gadgets for Ghana.",
        "phone": "+233244011011",
        "address": "Accra Mall, Tetteh Quarshie, Accra",
        "products": [
            {
                "name": "Samsung Galaxy S24 Ultra 512GB",
                "price": 13500, "category": "Phones", "brand": "Samsung",
                "desc": "6.8\" AMOLED, Snapdragon 8 Gen 3, built-in S Pen, 200MP camera system.",
                "images": [
                    unsplash("1591337676887-a217a8eb7bef"),
                    unsplash("1574944985070-8f3ebc6b79d2"),
                    unsplash("1567581935884-3349723552ca"),
                ],
            },
            {
                "name": "Apple iPhone 15 Pro Max 256GB",
                "price": 15800, "category": "Phones", "brand": "Apple",
                "desc": "Titanium frame, A17 Pro chip, Action Button, ProRes video. Natural Titanium.",
                "images": [
                    unsplash("1574944985070-8f3ebc6b79d2"),
                    unsplash("1591337676887-a217a8eb7bef"),
                ],
            },
            {
                "name": "Sony WH-1000XM5 Headphones",
                "price": 3600, "category": "Headphones", "brand": "Sony",
                "desc": "Industry-leading ANC, 30hr battery, LDAC Hi-Res Audio, multipoint connect.",
                "images": [
                    unsplash("1546435770-a3e426bf472b"),
                    unsplash("1583394838336-acd977736f90"),
                ],
            },
            {
                "name": "Apple MacBook Air M3 15\"",
                "price": 13500, "category": "Laptops", "brand": "Apple",
                "desc": "M3 chip, 15.3\" Liquid Retina, 18-hour battery, 8GB RAM, 256GB SSD.",
                "images": [
                    unsplash("1517336714731-489689fd1ca8"),
                    unsplash("1496181133206-80ce9b88a853"),
                ],
            },
            {
                "name": "Dell XPS 13 Plus 2024",
                "price": 12400, "category": "Laptops", "brand": "Dell",
                "desc": "13.4\" OLED, Intel Core Ultra 7, InfinityEdge touch display, 32GB RAM.",
                "images": [
                    unsplash("1496181133206-80ce9b88a853"),
                    unsplash("1517336714731-489689fd1ca8"),
                ],
            },
            {
                "name": "Apple AirPods Pro 2nd Gen",
                "price": 2600, "category": "Earbuds", "brand": "Apple",
                "desc": "ANC, Adaptive Audio, Transparency mode, USB-C MagSafe case.",
                "images": [
                    unsplash("1590658268037-41439f31e6aa"),
                    unsplash("1583394838336-acd977736f90"),
                ],
            },
            {
                "name": "JBL Charge 5 Bluetooth Speaker",
                "price": 1860, "category": "Speakers", "brand": "JBL",
                "desc": "IP67 waterproof, 20hr playtime, powerbank function, JBL Signature Sound.",
                "images": [
                    unsplash("1608043152269-423dbba4e7e1"),
                    unsplash("1546435770-a3e426bf472b"),
                ],
            },
            {
                "name": "Logitech MX Master 3S Mouse",
                "price": 1020, "category": "Accessories", "brand": "Logitech",
                "desc": "Quiet click, 8K DPI sensor, MagSpeed wheel, USB-C, Bluetooth + USB.",
                "images": [
                    unsplash("1519389950473-47ba0277781c"),
                    unsplash("1608043152269-423dbba4e7e1"),
                ],
            },
            {
                "name": "Google Pixel 8 Pro 256GB",
                "price": 10500, "category": "Phones", "brand": "Google",
                "desc": "Tensor G3 chip, 50MP triple camera, 7 years OS updates, AI Magic Eraser.",
                "images": [
                    unsplash("1567581935884-3349723552ca"),
                    unsplash("1591337676887-a217a8eb7bef"),
                ],
            },
            {
                "name": "Anker 737 Power Bank 24000mAh",
                "price": 1150, "category": "Accessories", "brand": "Anker",
                "desc": "140W max output, dual USB-C + USB-A, InfiniPower cells, smart display.",
                "images": [
                    unsplash("1608043152269-423dbba4e7e1"),
                    unsplash("1519389950473-47ba0277781c"),
                ],
            },
        ],
    },

    {
        "username": "vendor_pixelpoint_gh",
        "email": "pixelpoint@aca.demo",
        "store_name": "PixelPoint Ghana",
        "description": "Photography, gaming, and content-creator tech delivered in Accra.",
        "phone": "+233244012012",
        "address": "East Legon Hills, Accra",
        "products": [
            {
                "name": "Sony A7 IV Mirrorless Body",
                "price": 28500, "category": "Cameras", "brand": "Sony",
                "desc": "33MP BSI-CMOS sensor, 4K60p video, 5-axis IBIS, dual card slots.",
                "images": [unsplash("1502920917128-1aa671bb8680"), unsplash("1510127034890-ba27304e36b4")],
            },
            {
                "name": "Canon EOS R8 Mirrorless + 24-50mm",
                "price": 18500, "category": "Cameras", "brand": "Canon",
                "desc": "24MP full-frame, DIGIC X II, 4K40p uncropped, eye-tracking AF.",
                "images": [unsplash("1510127034890-ba27304e36b4"), unsplash("1502920917128-1aa671bb8680")],
            },
            {
                "name": "DJI Mini 4 Pro Drone",
                "price": 8800, "category": "Drones", "brand": "DJI",
                "desc": "250g class, 4K/60fps HDR, omnidirectional obstacle sensing, 34-min flight.",
                "images": [unsplash("1473968512647-3e447244af8f"), unsplash("1502920917128-1aa671bb8680")],
            },
            {
                "name": "PlayStation 5 Slim + Extra Controller",
                "price": 7800, "category": "Gaming", "brand": "Sony",
                "desc": "PS5 Slim disc edition, DualSense controller, 1TB SSD, ray tracing.",
                "images": [unsplash("1606144042614-b2417e99c4e3"), unsplash("1544652621-bef8d44db0a7")],
            },
            {
                "name": "Rode PodMic USB Dynamic Microphone",
                "price": 1850, "category": "Audio", "brand": "Rode",
                "desc": "Broadcast-quality dynamic mic, USB-C + XLR, built-in preamp.",
                "images": [unsplash("1598488035139-bdbb2231ce04"), unsplash("1608043152269-423dbba4e7e1")],
            },
            {
                "name": "Elgato Stream Deck MK.2",
                "price": 1600, "category": "Accessories", "brand": "Elgato",
                "desc": "15 LCD keys, infinite profiles, direct Twitch/YouTube/OBS control.",
                "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1598488035139-bdbb2231ce04")],
            },
            {
                "name": "Sony A6700 APS-C Mirrorless",
                "price": 17800, "category": "Cameras", "brand": "Sony",
                "desc": "26MP APS-C, AI subject recognition, 4K120p, 5-axis IBIS.",
                "images": [unsplash("1502920917128-1aa671bb8680"), unsplash("1510127034890-ba27304e36b4")],
            },
            {
                "name": "Razer DeathAdder V3 Pro Mouse",
                "price": 1450, "category": "Gaming", "brand": "Razer",
                "desc": "Focus Pro 30K optical sensor, 90hr battery, HyperSpeed wireless.",
                "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")],
            },
            {
                "name": "Godox SL60W LED Video Light",
                "price": 980, "category": "Lighting", "brand": "Godox",
                "desc": "60W daylight LED, bowens mount, wireless remote, quiet fan cooling.",
                "images": [unsplash("1598488035139-bdbb2231ce04"), unsplash("1510127034890-ba27304e36b4")],
            },
            {
                "name": "Zhiyun Crane M3 Gimbal",
                "price": 2200, "category": "Accessories", "brand": "Zhiyun",
                "desc": "3-axis stabilizer, built-in fill light, portable folding design.",
                "images": [unsplash("1502920917128-1aa671bb8680"), unsplash("1473968512647-3e447244af8f")],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: HOME & LIVING (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_homeharbour_gh",
        "email": "homeharbour@aca.demo",
        "store_name": "Home Harbour Ghana",
        "description": "Modern home decor, furniture, and living essentials for Ghanaian homes.",
        "phone": "+233244013013",
        "address": "Tema Community 25, Tema",
        "products": [
            {
                "name": "Rattan Pendant Light — Large",
                "price": 850, "category": "Lighting", "brand": "Home Harbour",
                "desc": "Hand-woven natural rattan shade, E27 fitting, 50cm diameter. Boho chic.",
                "images": [
                    unsplash("1555041469-a586c61ea9bc"),
                    unsplash("1493663284031-b7e3aefcae8e"),
                    unsplash("1616046229478-9901baab3e57"),
                ],
            },
            {
                "name": "Modular Sectional Sofa — Dove Grey",
                "price": 8500, "category": "Furniture", "brand": "Home Harbour",
                "desc": "4-seat modular sectional, performance fabric, removable covers, solid wood legs.",
                "images": [
                    unsplash("1555041469-a586c61ea9bc"),
                    unsplash("1493663284031-b7e3aefcae8e"),
                ],
            },
            {
                "name": "Ceramic Vase Set of 3 — Earth",
                "price": 420, "category": "Decor", "brand": "Home Harbour",
                "desc": "Hand-thrown stoneware vases in earth tones. Matte finish, varying heights.",
                "images": [
                    unsplash("1616046229478-9901baab3e57"),
                    unsplash("1555041469-a586c61ea9bc"),
                ],
            },
            {
                "name": "Bamboo Dining Table 6-Seater",
                "price": 4200, "category": "Furniture", "brand": "Home Harbour",
                "desc": "Solid bamboo top, steel frame, seats 6 comfortably. Eco-friendly and durable.",
                "images": [
                    unsplash("1493663284031-b7e3aefcae8e"),
                    unsplash("1555041469-a586c61ea9bc"),
                ],
            },
            {
                "name": "Linen Throw Pillow Set — Sand",
                "price": 280, "category": "Textiles", "brand": "Home Harbour",
                "desc": "Set of 2 linen-blend throw pillows, 50x50cm, natural sand colour.",
                "images": [
                    unsplash("1616046229478-9901baab3e57"),
                    unsplash("1493663284031-b7e3aefcae8e"),
                ],
            },
            {
                "name": "Scented Soy Candle — Coconut Lime",
                "price": 180, "category": "Decor", "brand": "Home Harbour",
                "desc": "100% soy wax, cotton wick, 45hr burn time. Tropical coconut-lime scent.",
                "images": [
                    unsplash("1555041469-a586c61ea9bc"),
                    unsplash("1616046229478-9901baab3e57"),
                ],
            },
            {
                "name": "Handwoven Kente Wall Art",
                "price": 750, "category": "Wall Art", "brand": "Home Harbour",
                "desc": "Framed kente strip wall piece, 60x90cm. Celebrates Ghanaian heritage.",
                "images": [
                    unsplash("1493663284031-b7e3aefcae8e"),
                    unsplash("1616046229478-9901baab3e57"),
                ],
            },
            {
                "name": "Sheepskin Rug — Ivory",
                "price": 1200, "category": "Rugs", "brand": "Home Harbour",
                "desc": "Genuine sheepskin, ultra-soft, 90x60cm. Luxury underfoot comfort.",
                "images": [
                    unsplash("1555041469-a586c61ea9bc"),
                    unsplash("1493663284031-b7e3aefcae8e"),
                ],
            },
            {
                "name": "Minimalist Bookshelf — Walnut",
                "price": 2800, "category": "Furniture", "brand": "Home Harbour",
                "desc": "5-shelf open bookcase, solid walnut veneer, steel hairpin legs. 180x80cm.",
                "images": [
                    unsplash("1616046229478-9901baab3e57"),
                    unsplash("1555041469-a586c61ea9bc"),
                ],
            },
            {
                "name": "Macramé Wall Hanging — XL",
                "price": 480, "category": "Wall Art", "brand": "Home Harbour",
                "desc": "Hand-knotted cotton macramé, driftwood rod, 80x120cm. Boho statement.",
                "images": [
                    unsplash("1493663284031-b7e3aefcae8e"),
                    unsplash("1616046229478-9901baab3e57"),
                ],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: BEAUTY & SKINCARE (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_glowgh",
        "email": "glowgh@aca.demo",
        "store_name": "GlowGH Beauty",
        "description": "Skincare, makeup, and beauty essentials curated for melanin-rich skin.",
        "phone": "+233244014014",
        "address": "Labone, Accra",
        "products": [
            {
                "name": "Shea Moisture Manuka Honey Masque",
                "price": 380, "category": "Hair Care", "brand": "SheaMoisture",
                "desc": "Deep conditioning hair masque with raw shea, manuka honey, mafura oil.",
                "images": [
                    unsplash("1556228720-195a672e8a03"),
                    unsplash("1598440947619-2c35fc9aa81d"),
                ],
            },
            {
                "name": "Black Girl Sunscreen SPF 30",
                "price": 320, "category": "Skincare", "brand": "Black Girl Sunscreen",
                "desc": "Moisturising SPF 30 for melanin-rich skin. No white cast, non-greasy.",
                "images": [
                    unsplash("1598440947619-2c35fc9aa81d"),
                    unsplash("1556228720-195a672e8a03"),
                ],
            },
            {
                "name": "Fenty Beauty Pro Filt'r Foundation",
                "price": 750, "category": "Makeup", "brand": "Fenty Beauty",
                "desc": "Soft-matte finish, buildable coverage, 40+ shades. Sweat-proof formula.",
                "images": [
                    unsplash("1522335789203-aabd1fc54bc9"),
                    unsplash("1598440947619-2c35fc9aa81d"),
                ],
            },
            {
                "name": "Ordinary Niacinamide 10% + Zinc",
                "price": 180, "category": "Skincare", "brand": "The Ordinary",
                "desc": "High-strength vitamin B3 serum for pores and blemishes. 30ml.",
                "images": [
                    unsplash("1598440947619-2c35fc9aa81d"),
                    unsplash("1556228720-195a672e8a03"),
                ],
            },
            {
                "name": "Palmer's Cocoa Butter Formula",
                "price": 120, "category": "Body Care", "brand": "Palmer's",
                "desc": "Pure cocoa butter lotion for dry skin. Vitamin E, elastin, collagen.",
                "images": [
                    unsplash("1556228720-195a672e8a03"),
                    unsplash("1522335789203-aabd1fc54bc9"),
                ],
            },
            {
                "name": "MAC Studio Fix Powder Plus Foundation",
                "price": 880, "category": "Makeup", "brand": "MAC",
                "desc": "Oil-absorbing powder foundation with SPF 15. Matte finish, 40 shades.",
                "images": [
                    unsplash("1522335789203-aabd1fc54bc9"),
                    unsplash("1598440947619-2c35fc9aa81d"),
                ],
            },
            {
                "name": "Cantu Shea Butter Leave-In Conditioner",
                "price": 220, "category": "Hair Care", "brand": "Cantu",
                "desc": "Restores moisture to natural hair. Shea butter, coconut oil, argan oil.",
                "images": [
                    unsplash("1556228720-195a672e8a03"),
                    unsplash("1522335789203-aabd1fc54bc9"),
                ],
            },
            {
                "name": "NYX Matte Lip Cream Set of 6",
                "price": 420, "category": "Makeup", "brand": "NYX",
                "desc": "Long-wearing liquid matte lip cream. 6 rich shades from nude to berry.",
                "images": [
                    unsplash("1522335789203-aabd1fc54bc9"),
                    unsplash("1556228720-195a672e8a03"),
                ],
            },
            {
                "name": "Vitamin C Brightening Serum 30ml",
                "price": 280, "category": "Skincare", "brand": "GlowGH",
                "desc": "15% L-ascorbic acid, vitamin E, ferulic acid. Fades dark spots, evens tone.",
                "images": [
                    unsplash("1598440947619-2c35fc9aa81d"),
                    unsplash("1556228720-195a672e8a03"),
                ],
            },
            {
                "name": "African Black Soap Bar 100g",
                "price": 85, "category": "Body Care", "brand": "GlowGH",
                "desc": "Authentic West African black soap, plantain ash, cocoa pod, shea butter.",
                "images": [
                    unsplash("1556228720-195a672e8a03"),
                    unsplash("1598440947619-2c35fc9aa81d"),
                ],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # CATEGORY: SPORTS & FITNESS (3 vendors)
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_fitzone_gh",
        "email": "fitzone@aca.demo",
        "store_name": "FitZone Ghana",
        "description": "Sports equipment, gym gear, and activewear for Ghana's fitness community.",
        "phone": "+233244015015",
        "address": "Atomic Junction, Accra",
        "products": [
            {
                "name": "Bowflex SelectTech 552 Dumbbells",
                "price": 5800, "category": "Gym Equipment", "brand": "Bowflex",
                "desc": "Adjustable 2.5-24kg per dumbbell. Replaces 15 sets of weights.",
                "images": [
                    unsplash("1534438327276-14e5300c3a48"),
                    unsplash("1517836357463-d25dfeac3438"),
                ],
            },
            {
                "name": "Nike Pro Training Shorts — Black",
                "price": 480, "category": "Activewear", "brand": "Nike",
                "desc": "Dri-FIT sweat-wicking fabric, 7-inch inseam, built-in briefs.",
                "images": [
                    unsplash("1518611012118-696072aa579a"),
                    unsplash("1534438327276-14e5300c3a48"),
                ],
            },
            {
                "name": "Yoga Mat Premium 6mm — Purple",
                "price": 380, "category": "Yoga", "brand": "FitZone",
                "desc": "Non-slip TPE foam, 183x61cm, alignment lines, carry strap included.",
                "images": [
                    unsplash("1545205597-3d9d02c29597"),
                    unsplash("1518611012118-696072aa579a"),
                ],
            },
            {
                "name": "Resistance Band Set 5-Piece",
                "price": 220, "category": "Accessories", "brand": "FitZone",
                "desc": "5 latex resistance bands: 5kg to 25kg resistance. Storage bag included.",
                "images": [
                    unsplash("1517836357463-d25dfeac3438"),
                    unsplash("1545205597-3d9d02c29597"),
                ],
            },
            {
                "name": "Jump Rope Speed Cable — Steel",
                "price": 95, "category": "Cardio", "brand": "FitZone",
                "desc": "Adjustable steel cable rope with ball-bearing handles for speed jumping.",
                "images": [
                    unsplash("1518611012118-696072aa579a"),
                    unsplash("1534438327276-14e5300c3a48"),
                ],
            },
            {
                "name": "Adidas Ultraboost Running Tights",
                "price": 680, "category": "Activewear", "brand": "Adidas",
                "desc": "Techfit compression, Climacool ventilation, reflective details.",
                "images": [
                    unsplash("1518611012118-696072aa579a"),
                    unsplash("1545205597-3d9d02c29597"),
                ],
            },
            {
                "name": "Pull-Up Bar — Doorframe Mount",
                "price": 320, "category": "Gym Equipment", "brand": "FitZone",
                "desc": "Heavy-duty steel, adjustable 75-100cm, supports up to 150kg.",
                "images": [
                    unsplash("1534438327276-14e5300c3a48"),
                    unsplash("1517836357463-d25dfeac3438"),
                ],
            },
            {
                "name": "Protein Shaker Bottle 700ml",
                "price": 65, "category": "Accessories", "brand": "FitZone",
                "desc": "BPA-free Tritan shaker with whisk ball, measurement marks, leak-proof lid.",
                "images": [
                    unsplash("1545205597-3d9d02c29597"),
                    unsplash("1518611012118-696072aa579a"),
                ],
            },
            {
                "name": "Boxing Gloves 12oz — Red",
                "price": 560, "category": "Boxing", "brand": "Everlast",
                "desc": "Genuine leather shell, layered foam padding, velcro strap closure.",
                "images": [
                    unsplash("1517836357463-d25dfeac3438"),
                    unsplash("1534438327276-14e5300c3a48"),
                ],
            },
            {
                "name": "Foam Roller — Deep Tissue 90cm",
                "price": 185, "category": "Recovery", "brand": "FitZone",
                "desc": "High-density EVA foam, textured surface for myofascial release.",
                "images": [
                    unsplash("1545205597-3d9d02c29597"),
                    unsplash("1517836357463-d25dfeac3438"),
                ],
            },
        ],
    },

    # ══════════════════════════════════════════════════════
    # REMAINING VENDORS — mix of categories
    # ══════════════════════════════════════════════════════
    {
        "username": "vendor_afrotech",
        "email": "afrotech@aca.demo",
        "store_name": "AfroTech Gadgets",
        "description": "Smart home, wearables, and cutting-edge tech accessories.",
        "phone": "+233244016016",
        "address": "Cantonment Road, Accra",
        "products": [
            {"name": "Ring Video Doorbell Pro 2", "price": 1850, "category": "Smart Home", "brand": "Ring", "desc": "1536p HD, 3D motion detection, colour night vision, pre-roll recording.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1583394838336-acd977736f90")]},
            {"name": "Nest Learning Thermostat", "price": 1600, "category": "Smart Home", "brand": "Google", "desc": "Auto-schedule, energy saving, Farsight display, works with Google Home.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")]},
            {"name": "Philips Hue Starter Kit E27", "price": 1200, "category": "Smart Home", "brand": "Philips", "desc": "3 colour smart bulbs + bridge. 16 million colours, voice & app control.", "images": [unsplash("1555041469-a586c61ea9bc"), unsplash("1493663284031-b7e3aefcae8e")]},
            {"name": "Fitbit Charge 6", "price": 1450, "category": "Wearables", "brand": "Fitbit", "desc": "Built-in GPS, 24/7 heart rate, SpO2, ECG, 7-day battery. Google Maps.", "images": [unsplash("1579586337278-3befd40fd17a"), unsplash("1617625802912-cde586faf8b1")]},
            {"name": "Amazon Echo Show 8 (3rd Gen)", "price": 980, "category": "Smart Home", "brand": "Amazon", "desc": "8\" HD touchscreen, Alexa, spatial audio, adaptive colour, smart-home hub.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")]},
            {"name": "TP-Link Deco XE75 Mesh WiFi 6E", "price": 2800, "category": "Networking", "brand": "TP-Link", "desc": "Tri-band WiFi 6E, 3-pack, covers 700sqm, 2.5G WAN port.", "images": [unsplash("1608043152269-423dbba4e7e1"), unsplash("1519389950473-47ba0277781c")]},
            {"name": "Xiaomi Smart Robot Vacuum S12", "price": 2200, "category": "Smart Home", "brand": "Xiaomi", "desc": "LiDAR navigation, 4000Pa suction, 3hr runtime, mop function.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")]},
            {"name": "GoPro HERO12 Black", "price": 4200, "category": "Cameras", "brand": "GoPro", "desc": "5.3K60 video, 27MP photos, HyperSmooth 6.0, waterproof to 10m.", "images": [unsplash("1502920917128-1aa671bb8680"), unsplash("1473968512647-3e447244af8f")]},
            {"name": "Belkin 3-in-1 MagSafe Charger", "price": 680, "category": "Accessories", "brand": "Belkin", "desc": "Charge iPhone, AirPods, and Apple Watch simultaneously. 15W MagSafe.", "images": [unsplash("1574944985070-8f3ebc6b79d2"), unsplash("1591337676887-a217a8eb7bef")]},
            {"name": "Samsung T7 Shield SSD 1TB", "price": 1100, "category": "Storage", "brand": "Samsung", "desc": "IP65 rated, 1050MB/s read, USB-C 3.2, military-grade drop protection.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")]},
        ],
    },

    {
        "username": "vendor_accrafashion",
        "email": "accrafashion@aca.demo",
        "store_name": "Accra Fashion House",
        "description": "Contemporary African fashion for the modern Accra professional.",
        "phone": "+233244017017",
        "address": "North Ridge, Accra",
        "products": [
            {"name": "Agbada Set 3-Piece — Royal Blue", "price": 2500, "category": "Traditional Wear", "brand": "Accra Fashion", "desc": "Embroidered agbada, inner kaftan, and trousers. Wedding and event wear.", "images": [unsplash("1604671801908-6f0c6a092c05"), unsplash("1607345366928-199ea26cfe3e")]},
            {"name": "Safari Linen Suit — Beige", "price": 1800, "category": "Suits", "brand": "Accra Fashion", "desc": "Two-button linen safari suit, patch pockets. Tropical formal perfection.", "images": [unsplash("1507003211169-0a1dd7228f2d"), unsplash("1624378439575-d8705ad7ae80")]},
            {"name": "Wax-Print Kaftan Dress — Multicolour", "price": 750, "category": "Dresses", "brand": "Accra Fashion", "desc": "Loose-fit kaftan in vibrant wax-print. Scooped neck, wide sleeves.", "images": [unsplash("1539109136881-3be0616acf4b"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "Embroidered Dashiki Shirt Set", "price": 680, "category": "Shirts", "brand": "Accra Fashion", "desc": "Matching dashiki shirt and shorts in bold embroidered cotton.", "images": [unsplash("1583743814966-8d4f37861531"), unsplash("1521572163474-6864f9cf17ab")]},
            {"name": "Silk Blend Kaftan Robe — Gold", "price": 1200, "category": "Loungewear", "brand": "Accra Fashion", "desc": "Luxe silk-blend kaftan robe with gold trim and self-tie belt.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1539109136881-3be0616acf4b")]},
            {"name": "High-Waist Ankara Shorts", "price": 340, "category": "Shorts", "brand": "Accra Fashion", "desc": "Structured high-waist shorts in bold Ankara print, concealed zip.", "images": [unsplash("1624378439575-d8705ad7ae80"), unsplash("1507003211169-0a1dd7228f2d")]},
            {"name": "Tailored Ankara Blazer", "price": 1350, "category": "Jackets", "brand": "Accra Fashion", "desc": "Single-button blazer in bold ankara print. Fully lined.", "images": [unsplash("1551537824-8246af430dc4"), unsplash("1607345366928-199ea26cfe3e")]},
            {"name": "Cotton Boubou Dress — White", "price": 850, "category": "Dresses", "brand": "Accra Fashion", "desc": "Breathable cotton boubou with gold embroidery at neck and sleeves.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1539109136881-3be0616acf4b")]},
            {"name": "Smocked Ankara Maxi Skirt", "price": 480, "category": "Skirts", "brand": "Accra Fashion", "desc": "Floor-length elasticated smocked waist in vibrant ankara. Tiered hem.", "images": [unsplash("1539109136881-3be0616acf4b"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "African Print Loafer Shoes", "price": 780, "category": "Shoes", "brand": "Accra Fashion", "desc": "Leather loafer with ankara fabric insert on the toe cap. Handmade.", "images": [unsplash("1553361371-9b22f78e8b1d"), unsplash("1543508282-6319a3ea2514")]},
        ],
    },

    {
        "username": "vendor_kumasi_craft",
        "email": "kumascraft@aca.demo",
        "store_name": "Kumasi Craft & Art",
        "description": "Handmade Ghanaian crafts, art, and cultural artifacts from Kumasi artisans.",
        "phone": "+233244018018",
        "address": "Adum, Kumasi",
        "products": [
            {"name": "Bronze Adinkra Wall Plaque — Gye Nyame", "price": 650, "category": "Wall Art", "brand": "Kumasi Craft", "desc": "Hand-cast bronze plaque, 30cm diameter. 'Gye Nyame' symbol — supremacy of God.", "images": [unsplash("1493663284031-b7e3aefcae8e"), unsplash("1616046229478-9901baab3e57")]},
            {"name": "Hand-Carved Ebony Elephant Set", "price": 480, "category": "Sculptures", "brand": "Kumasi Craft", "desc": "Set of 3 hand-carved ebony wood elephants. Good luck and family symbol.", "images": [unsplash("1616046229478-9901baab3e57"), unsplash("1493663284031-b7e3aefcae8e")]},
            {"name": "Beaded Koforidua Necklace", "price": 280, "category": "Jewelry", "brand": "Kumasi Craft", "desc": "Authentic Koforidua glass bead necklace, hand-strung by local artisans.", "images": [unsplash("1611652022419-a9419f74343d"), unsplash("1602752250015-5c1f68fdef73")]},
            {"name": "Kente Strip Table Runner", "price": 350, "category": "Textiles", "brand": "Kumasi Craft", "desc": "Authentic kente strip table runner, 180x35cm. Woven in Bonwire.", "images": [unsplash("1493663284031-b7e3aefcae8e"), unsplash("1616046229478-9901baab3e57")]},
            {"name": "Terracotta Pottery Set — 4 Piece", "price": 420, "category": "Pottery", "brand": "Kumasi Craft", "desc": "Hand-thrown terracotta: 1 large pot, 1 medium, 2 small. Natural clay finish.", "images": [unsplash("1616046229478-9901baab3e57"), unsplash("1555041469-a586c61ea9bc")]},
            {"name": "Adinkra Stamped Fabric — 6 Yards", "price": 380, "category": "Textiles", "brand": "Kumasi Craft", "desc": "Hand-stamped Adinkra fabric using calabash stamps and Adinkra dye. 6 yards.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1583743814966-8d4f37861531")]},
            {"name": "Woven Grass Basket — XL", "price": 180, "category": "Baskets", "brand": "Kumasi Craft", "desc": "Hand-woven bolga basket, cowhide-trimmed handles. Multi-purpose storage.", "images": [unsplash("1493663284031-b7e3aefcae8e"), unsplash("1616046229478-9901baab3e57")]},
            {"name": "Stools Ashanti Carved — Royal", "price": 1200, "category": "Furniture", "brand": "Kumasi Craft", "desc": "Traditional Ashanti carved wooden stool, symbol of power. Hand-finished.", "images": [unsplash("1555041469-a586c61ea9bc"), unsplash("1493663284031-b7e3aefcae8e")]},
            {"name": "Oil Painting — Accra Street Scene", "price": 2200, "category": "Paintings", "brand": "Kumasi Craft", "desc": "Original oil on canvas, 60x90cm. Vibrant Accra street scene by local artist.", "images": [unsplash("1616046229478-9901baab3e57"), unsplash("1493663284031-b7e3aefcae8e")]},
            {"name": "Kente Bow Tie — Silk Blend", "price": 180, "category": "Accessories", "brand": "Kumasi Craft", "desc": "Pre-tied bow tie in authentic kente strip cloth. Self-adjusting neck band.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1583743814966-8d4f37861531")]},
        ],
    },

    {
        "username": "vendor_accrajewels2",
        "email": "accrajewels2@aca.demo",
        "store_name": "Precious Accra Gems",
        "description": "Fine jewelry and gemstones sourced from Ghana and West Africa.",
        "phone": "+233244019019",
        "address": "Ridge, Accra",
        "products": [
            {"name": "Gold Cuff Bracelet — 22K", "price": 8500, "category": "Bracelets", "brand": "PAG", "desc": "Solid 22K yellow gold cuff, hand-hammered finish. 18g weight.", "images": [unsplash("1617038220319-276d3cfab638"), unsplash("1611652022419-a9419f74343d")]},
            {"name": "Diamond Pavé Earrings", "price": 16500, "category": "Earrings", "brand": "PAG", "desc": "0.8ct total diamond pavé in 18K white gold studs. Round brilliant cut.", "images": [unsplash("1602752250015-5c1f68fdef73"), unsplash("1617038220319-276d3cfab638")]},
            {"name": "Emerald Pendant Necklace", "price": 9800, "category": "Necklaces", "brand": "PAG", "desc": "Natural Colombian emerald, 1.2ct, set in 18K white gold. On 18in chain.", "images": [unsplash("1611652022419-a9419f74343d"), unsplash("1602752250015-5c1f68fdef73")]},
            {"name": "Men's Gold ID Bracelet", "price": 7200, "category": "Bracelets", "brand": "PAG", "desc": "14K yellow gold ID bracelet, engravable plate, 20cm length.", "images": [unsplash("1617038220319-276d3cfab638"), unsplash("1611652022419-a9419f74343d")]},
            {"name": "Ruby Cluster Ring — Rose Gold", "price": 12800, "category": "Rings", "brand": "PAG", "desc": "Natural Mozambique rubies in flower cluster, 14K rose gold, 0.6ct total.", "images": [unsplash("1602752250015-5c1f68fdef73"), unsplash("1617038220319-276d3cfab638")]},
            {"name": "Gold Anklet — Charm", "price": 2200, "category": "Anklets", "brand": "PAG", "desc": "14K gold anklet with sun, moon, and star charms. Adjustable 22-25cm.", "images": [unsplash("1611652022419-a9419f74343d"), unsplash("1602752250015-5c1f68fdef73")]},
            {"name": "Tanzanite Drop Earrings", "price": 14500, "category": "Earrings", "brand": "PAG", "desc": "Pear-cut tanzanite drops, 2ct total, platinum settings. Rare blue-violet.", "images": [unsplash("1617038220319-276d3cfab638"), unsplash("1611652022419-a9419f74343d")]},
            {"name": "Diamond Tennis Necklace 18in", "price": 28500, "category": "Necklaces", "brand": "PAG", "desc": "3ct total diamond tennis necklace, 18K white gold, prong set.", "images": [unsplash("1602752250015-5c1f68fdef73"), unsplash("1617038220319-276d3cfab638")]},
            {"name": "Gold Coin Ring — Ancient Style", "price": 5800, "category": "Rings", "brand": "PAG", "desc": "18K yellow gold ring with ancient Roman coin motif, size 7.", "images": [unsplash("1611652022419-a9419f74343d"), unsplash("1602752250015-5c1f68fdef73")]},
            {"name": "Pearl Choker Necklace — 3-Row", "price": 4200, "category": "Necklaces", "brand": "PAG", "desc": "3-strand freshwater pearl choker, 14K gold clasp. 8mm pearls.", "images": [unsplash("1617038220319-276d3cfab638"), unsplash("1611652022419-a9419f74343d")]},
        ],
    },

    {
        "username": "vendor_ghanabeauty2",
        "email": "ghanabeauty2@aca.demo",
        "store_name": "Nana Beauty Supply",
        "description": "Hair extensions, wigs, and professional beauty supplies across Ghana.",
        "phone": "+233244020020",
        "address": "Madina Market, Accra",
        "products": [
            {"name": "Virgin Brazilian Straight Bundle 20in", "price": 850, "category": "Hair Extensions", "brand": "Nana Beauty", "desc": "100% unprocessed Brazilian virgin hair, double-weft. Natural black.", "images": [unsplash("1522335789203-aabd1fc54bc9"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Lace Front Wig — Body Wave 24in", "price": 2200, "category": "Wigs", "brand": "Nana Beauty", "desc": "13x4 lace front, 150% density, pre-plucked hairline, baby hair.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1522335789203-aabd1fc54bc9")]},
            {"name": "Afro Kinky Twist Crochet Hair", "price": 180, "category": "Crochet Hair", "brand": "Nana Beauty", "desc": "Pack of 8 packs, pre-looped, natural-looking coil pattern.", "images": [unsplash("1522335789203-aabd1fc54bc9"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Peruvian Loose Wave Bundle", "price": 780, "category": "Hair Extensions", "brand": "Nana Beauty", "desc": "100% remy Peruvian hair, natural loose wave, 18 inch.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1522335789203-aabd1fc54bc9")]},
            {"name": "Box Braiding Hair Jumbo — 4 Packs", "price": 120, "category": "Braiding Hair", "brand": "Nana Beauty", "desc": "Pre-stretched kanekalon synthetic fiber, 82cm length, 4 packs.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1556228720-195a672e8a03")]},
            {"name": "HD Closure Wig — Straight Bob 14in", "price": 1650, "category": "Wigs", "brand": "Nana Beauty", "desc": "4x4 HD lace closure, 14 inch straight bob, 180% density.", "images": [unsplash("1522335789203-aabd1fc54bc9"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Scalp Bleach & Highlight Kit", "price": 220, "category": "Hair Colour", "brand": "Nana Beauty", "desc": "Professional bleach powder, developer, gloves, brush. Salon-grade.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1522335789203-aabd1fc54bc9")]},
            {"name": "Weft Needle & Thread Kit", "price": 55, "category": "Accessories", "brand": "Nana Beauty", "desc": "Heavy-duty curved needles, 3 spools weaving thread. Professional grade.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Wig Cap Set — 6 Pack Nude", "price": 45, "category": "Accessories", "brand": "Nana Beauty", "desc": "Nylon stretch wig caps, nude/beige, one size, 6 caps per pack.", "images": [unsplash("1522335789203-aabd1fc54bc9"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Argan Oil Hair Serum 100ml", "price": 180, "category": "Hair Care", "brand": "Nana Beauty", "desc": "Pure Moroccan argan oil, frizz control, shine, heat protection.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1522335789203-aabd1fc54bc9")]},
        ],
    },

    {
        "username": "vendor_greenlife_gh",
        "email": "greenlife@aca.demo",
        "store_name": "GreenLife Organics",
        "description": "Organic foods, herbal supplements, and natural wellness products.",
        "phone": "+233244021021",
        "address": "Dzorwulu, Accra",
        "products": [
            {"name": "Raw Organic Shea Butter 500g", "price": 95, "category": "Natural Beauty", "brand": "GreenLife", "desc": "Unrefined Grade-A shea butter from Northern Ghana. For skin and hair.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Moringa Leaf Powder 250g", "price": 75, "category": "Supplements", "brand": "GreenLife", "desc": "Certified organic Ghanaian moringa, air-dried, 250g resealable bag.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1545205597-3d9d02c29597")]},
            {"name": "Black Seed Oil Cold-Pressed 100ml", "price": 120, "category": "Supplements", "brand": "GreenLife", "desc": "Nigella sativa cold-pressed oil. Immune support, anti-inflammatory.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Hibiscus Tea — Dried Petals 200g", "price": 65, "category": "Teas", "brand": "GreenLife", "desc": "Sun-dried hibiscus sorrel petals. Brew hot or cold. Rich in Vitamin C.", "images": [unsplash("1545205597-3d9d02c29597"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Organic Coconut Oil Extra-Virgin 500ml", "price": 110, "category": "Natural Beauty", "brand": "GreenLife", "desc": "Cold-pressed, unrefined, fair-trade coconut oil. Multi-purpose beauty staple.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1545205597-3d9d02c29597")]},
            {"name": "Aloe Vera Gel Pure 300ml", "price": 85, "category": "Natural Beauty", "brand": "GreenLife", "desc": "99% pure aloe vera gel. Soothing, moisturising, sunburn relief.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Baobab Fruit Powder 200g", "price": 90, "category": "Supplements", "brand": "GreenLife", "desc": "Organic West African baobab powder. High Vitamin C, prebiotics, calcium.", "images": [unsplash("1545205597-3d9d02c29597"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Neem Leaf Powder 150g", "price": 55, "category": "Supplements", "brand": "GreenLife", "desc": "Wildcrafted Ghanaian neem leaf, air-dried and ground. Detox support.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1545205597-3d9d02c29597")]},
            {"name": "Rosehip Seed Oil 30ml", "price": 150, "category": "Natural Beauty", "brand": "GreenLife", "desc": "Cold-pressed rosehip oil. Anti-ageing, brightening, rich in omega fatty acids.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Shea Butter Soap Bar — Lavender", "price": 35, "category": "Natural Beauty", "brand": "GreenLife", "desc": "Handmade cold-process soap with raw shea butter and lavender oil.", "images": [unsplash("1545205597-3d9d02c29597"), unsplash("1556228720-195a672e8a03")]},
        ],
    },

    {
        "username": "vendor_kidzone_gh",
        "email": "kidzone@aca.demo",
        "store_name": "KidZone Ghana",
        "description": "Educational toys, games, and children's accessories for ages 0-12.",
        "phone": "+233244022022",
        "address": "Spintex, Accra",
        "products": [
            {"name": "LEGO Classic Creative Bricks 900pcs", "price": 680, "category": "Toys", "brand": "LEGO", "desc": "900 colourful classic LEGO bricks in a storage box. Ages 4+.", "images": [unsplash("1535572290543-960a8046f5af"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "Melissa & Doug Wooden Puzzle Set", "price": 220, "category": "Educational Toys", "brand": "Melissa & Doug", "desc": "Set of 5 wooden chunky puzzles: farm, safari, vehicles, ocean, food.", "images": [unsplash("1535572290543-960a8046f5af"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "Hot Wheels 20-Car Gift Pack", "price": 280, "category": "Toys", "brand": "Hot Wheels", "desc": "20 die-cast cars, varied colours and styles. Ages 3+.", "images": [unsplash("1535572290543-960a8046f5af"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "Kids Art Supply Set — 100 Pieces", "price": 320, "category": "Art & Craft", "brand": "KidZone", "desc": "Crayons, markers, watercolours, pencils, glue, scissors. Full art kit.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1535572290543-960a8046f5af")]},
            {"name": "Children's Story Book Set — Anansi Tales", "price": 180, "category": "Books", "brand": "KidZone", "desc": "Set of 5 Anansi the Spider story books, illustrated, ages 4-8.", "images": [unsplash("1535572290543-960a8046f5af"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "Baby Walker — Musical Red", "price": 480, "category": "Baby Gear", "brand": "KidZone", "desc": "Push-along baby walker with music buttons, shape sorter, and activity panel.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1535572290543-960a8046f5af")]},
            {"name": "Scooter 3-Wheel — Blue (Ages 2-5)", "price": 580, "category": "Outdoor Toys", "brand": "KidZone", "desc": "3-wheel micro-scooter, adjustable height, smooth steering, LED wheels.", "images": [unsplash("1535572290543-960a8046f5af"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "Play-Doh Ultimate Set 65 Pieces", "price": 250, "category": "Art & Craft", "brand": "Hasbro", "desc": "65-piece modeling clay set with moulds, tools, and 10 cans.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1535572290543-960a8046f5af")]},
            {"name": "Bicycle 16in — Boys Blue", "price": 1200, "category": "Outdoor Toys", "brand": "KidZone", "desc": "Steel frame, training wheels, hand brake, bell. Ages 4-7.", "images": [unsplash("1535572290543-960a8046f5af"), unsplash("1558618666-fcd25c85cd64")]},
            {"name": "Board Game Set — 5 Classics", "price": 350, "category": "Board Games", "brand": "KidZone", "desc": "Ludo, Snakes & Ladders, Checkers, Dominoes, Draughts. Family game night.", "images": [unsplash("1558618666-fcd25c85cd64"), unsplash("1535572290543-960a8046f5af")]},
        ],
    },

    {
        "username": "vendor_luxuryride_gh",
        "email": "luxuryride@aca.demo",
        "store_name": "LuxuryRide Auto Parts",
        "description": "Premium car accessories and auto parts for Ghana's car owners.",
        "phone": "+233244023023",
        "address": "Tema Industrial Area, Tema",
        "products": [
            {"name": "Meguiar's Ultimate Car Wax", "price": 280, "category": "Car Care", "brand": "Meguiar's", "desc": "Synthetic polymer wax for extreme gloss. UV protection, 3-month durability.", "images": [unsplash("1503376780353-7e6692767b70"), unsplash("1489824904134-7196a96195a7")]},
            {"name": "BlackVue DR750X-2CH Dashcam", "price": 2800, "category": "Car Electronics", "brand": "BlackVue", "desc": "Front + rear 4K dashcam, cloud-connected, 60fps, built-in GPS.", "images": [unsplash("1503376780353-7e6692767b70"), unsplash("1489824904134-7196a96195a7")]},
            {"name": "Leather Seat Cover Set — Black", "price": 1200, "category": "Car Interior", "brand": "LuxuryRide", "desc": "Full set: front and rear PU leather seat covers, airbag-compatible.", "images": [unsplash("1489824904134-7196a96195a7"), unsplash("1503376780353-7e6692767b70")]},
            {"name": "Car Air Freshener — OEM Grade", "price": 45, "category": "Car Accessories", "brand": "LuxuryRide", "desc": "Charcoal-infused bamboo car freshener. Natural odour elimination, 60 days.", "images": [unsplash("1503376780353-7e6692767b70"), unsplash("1489824904134-7196a96195a7")]},
            {"name": "Portable Jump Starter 12000mAh", "price": 680, "category": "Car Electronics", "brand": "NOCO", "desc": "Jumps up to 6.0L petrol or 3.0L diesel engines. USB power bank function.", "images": [unsplash("1489824904134-7196a96195a7"), unsplash("1503376780353-7e6692767b70")]},
            {"name": "Alloy Steering Wheel Cover", "price": 120, "category": "Car Interior", "brand": "LuxuryRide", "desc": "Microfibre leather steering wheel cover, universal 38cm fit, non-slip grip.", "images": [unsplash("1503376780353-7e6692767b70"), unsplash("1489824904134-7196a96195a7")]},
            {"name": "Heavy-Duty Car Floor Mats — Set of 4", "price": 380, "category": "Car Interior", "brand": "LuxuryRide", "desc": "All-weather rubber floor mats, custom-fit design, deep tread channels.", "images": [unsplash("1489824904134-7196a96195a7"), unsplash("1503376780353-7e6692767b70")]},
            {"name": "LED Interior Light Strip Kit", "price": 95, "category": "Car Electronics", "brand": "LuxuryRide", "desc": "RGB LED footwell lighting kit, remote control, 16 colours, 4 strips.", "images": [unsplash("1503376780353-7e6692767b70"), unsplash("1489824904134-7196a96195a7")]},
            {"name": "Car Phone Mount — Magnetic Vent", "price": 55, "category": "Car Accessories", "brand": "LuxuryRide", "desc": "Strong magnetic vent mount, 360° rotation, works with any phone case.", "images": [unsplash("1489824904134-7196a96195a7"), unsplash("1503376780353-7e6692767b70")]},
            {"name": "Tyre Pressure Gauge — Digital", "price": 85, "category": "Car Accessories", "brand": "LuxuryRide", "desc": "Digital LCD tyre pressure gauge 0-100 PSI, backlit, includes carry case.", "images": [unsplash("1503376780353-7e6692767b70"), unsplash("1489824904134-7196a96195a7")]},
        ],
    },

    {
        "username": "vendor_foodbasket_gh",
        "email": "foodbasket@aca.demo",
        "store_name": "Food Basket Ghana",
        "description": "Premium cookware, kitchen gadgets, and food products delivered across Ghana.",
        "phone": "+233244024024",
        "address": "Kasoa, Central Region",
        "products": [
            {"name": "Le Creuset Cast Iron Dutch Oven 5.3L", "price": 4500, "category": "Cookware", "brand": "Le Creuset", "desc": "Enamelled cast iron, oven-safe to 260°C, perfect for Ghanaian stews.", "images": [unsplash("1556909114-f6e7ad7d3136"), unsplash("1556910585-a44240059db7")]},
            {"name": "KitchenAid Stand Mixer 5qt", "price": 5800, "category": "Kitchen Appliances", "brand": "KitchenAid", "desc": "575W motor, 10 speeds, tilt-head design, 5qt stainless steel bowl.", "images": [unsplash("1556910585-a44240059db7"), unsplash("1556909114-f6e7ad7d3136")]},
            {"name": "Instant Pot Duo 6qt", "price": 1850, "category": "Kitchen Appliances", "brand": "Instant Pot", "desc": "7-in-1 multi-cooker: pressure cooker, slow cooker, rice cooker and more.", "images": [unsplash("1556909114-f6e7ad7d3136"), unsplash("1556910585-a44240059db7")]},
            {"name": "Global Chef's Knife G-2 20cm", "price": 1450, "category": "Knives", "brand": "Global", "desc": "Japanese CROMOVA stainless steel, ice-hardened, seamless construction.", "images": [unsplash("1556910585-a44240059db7"), unsplash("1556909114-f6e7ad7d3136")]},
            {"name": "Cast Iron Grill Pan — 30cm Square", "price": 680, "category": "Cookware", "brand": "Lodge", "desc": "Pre-seasoned cast iron square grill, ribbed surface, helper handle.", "images": [unsplash("1556909114-f6e7ad7d3136"), unsplash("1556910585-a44240059db7")]},
            {"name": "Vitamix E310 Explorian Blender", "price": 2800, "category": "Kitchen Appliances", "brand": "Vitamix", "desc": "1400W motor, 10 variable speeds, self-cleaning, 48oz container.", "images": [unsplash("1556910585-a44240059db7"), unsplash("1556909114-f6e7ad7d3136")]},
            {"name": "Zwilling 5-Piece Pan Set", "price": 2200, "category": "Cookware", "brand": "Zwilling", "desc": "Nonstick stainless pans: 20, 24, 28cm fry pans + 16, 20cm saucepans.", "images": [unsplash("1556909114-f6e7ad7d3136"), unsplash("1556910585-a44240059db7")]},
            {"name": "Staub Ceramic Baking Dish — 35cm", "price": 920, "category": "Bakeware", "brand": "Staub", "desc": "Glazed ceramic, oven to table, even heat distribution, dishwasher-safe.", "images": [unsplash("1556910585-a44240059db7"), unsplash("1556909114-f6e7ad7d3136")]},
            {"name": "OXO Steel Kitchen Scale — 5kg", "price": 320, "category": "Kitchen Tools", "brand": "OXO", "desc": "Stainless platform, pull-out display, tare function, accurate to 1g.", "images": [unsplash("1556909114-f6e7ad7d3136"), unsplash("1556910585-a44240059db7")]},
            {"name": "Wusthof Classic Knife Block Set 7pcs", "price": 3800, "category": "Knives", "brand": "Wusthof", "desc": "7-piece knife block set: chef, bread, carving, utility, 2 paring knives + honing steel.", "images": [unsplash("1556910585-a44240059db7"), unsplash("1556909114-f6e7ad7d3136")]},
        ],
    },

    {
        "username": "vendor_officepro_gh",
        "email": "officepro@aca.demo",
        "store_name": "OfficePro Ghana",
        "description": "Office furniture, stationery, and professional workspace solutions.",
        "phone": "+233244025025",
        "address": "North Industrial Area, Accra",
        "products": [
            {"name": "Herman Miller Aeron Chair — Size B", "price": 18500, "category": "Office Furniture", "brand": "Herman Miller", "desc": "PostureFit SL support, 8Z Pellicle mesh, adjustable armrests. Graphite.", "images": [unsplash("1579586337278-3befd40fd17a"), unsplash("1519389950473-47ba0277781c")]},
            {"name": "Standing Desk — Electric 160x80cm", "price": 4200, "category": "Office Furniture", "brand": "OfficePro", "desc": "Motorised height-adjust, memory presets, anti-collision, solid bamboo top.", "images": [unsplash("1517336714731-489689fd1ca8"), unsplash("1496181133206-80ce9b88a853")]},
            {"name": "HP LaserJet Pro M404dn Printer", "price": 3800, "category": "Office Equipment", "brand": "HP", "desc": "40ppm, duplex printing, USB + Ethernet, 1200dpi, 250-sheet tray.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")]},
            {"name": "LG 27UN880 4K USB-C Monitor", "price": 5800, "category": "Monitors", "brand": "LG", "desc": "27\" IPS 4K, USB-C 96W power delivery, ergo stand, DisplayHDR 400.", "images": [unsplash("1496181133206-80ce9b88a853"), unsplash("1517336714731-489689fd1ca8")]},
            {"name": "Wireless Keyboard & Mouse Combo", "price": 380, "category": "Accessories", "brand": "Logitech", "desc": "MK470 slim combo, quiet keys, 3-year battery life, unifying receiver.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")]},
            {"name": "A4 Printing Paper 80gsm — 5 Reams", "price": 180, "category": "Stationery", "brand": "Double A", "desc": "5 reams (2500 sheets), 80gsm, high brightness 102+, jam-free.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1608043152269-423dbba4e7e1")]},
            {"name": "Whiteboard 120x90cm Magnetic", "price": 680, "category": "Office Supplies", "brand": "OfficePro", "desc": "Magnetic dry-erase surface, aluminium frame, pen tray. Wall mountable.", "images": [unsplash("1517336714731-489689fd1ca8"), unsplash("1519389950473-47ba0277781c")]},
            {"name": "Shredder — 10-Sheet Micro-Cut", "price": 750, "category": "Office Equipment", "brand": "Fellowes", "desc": "P-4 micro-cut security, 10 sheets, 18L bin, jams-proof technology.", "images": [unsplash("1608043152269-423dbba4e7e1"), unsplash("1519389950473-47ba0277781c")]},
            {"name": "Filing Cabinet 3-Drawer — Metal", "price": 1200, "category": "Office Furniture", "brand": "OfficePro", "desc": "Steel 3-drawer lateral cabinet, A4 suspension files, lock included.", "images": [unsplash("1579586337278-3befd40fd17a"), unsplash("1519389950473-47ba0277781c")]},
            {"name": "Moleskine Classic Notebook Large Ruled", "price": 95, "category": "Stationery", "brand": "Moleskine", "desc": "Hardcover, 240 pages, acid-free paper, ribbon bookmark, elastic closure.", "images": [unsplash("1519389950473-47ba0277781c"), unsplash("1517336714731-489689fd1ca8")]},
        ],
    },

    {
        "username": "vendor_pharmadeal_gh",
        "email": "pharmadeal@aca.demo",
        "store_name": "PharmaDeal Ghana",
        "description": "Vitamins, supplements, and health products for Ghanaians.",
        "phone": "+233244026026",
        "address": "Achimota, Accra",
        "products": [
            {"name": "Centrum Men Multivitamin 60 Tabs", "price": 180, "category": "Vitamins", "brand": "Centrum", "desc": "Complete multivitamin for men: A, B, C, D, E, K, folic acid, zinc.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Vitamin D3 5000IU — 90 Softgels", "price": 95, "category": "Vitamins", "brand": "Now Foods", "desc": "High-potency D3 in olive oil. Bone health, immunity, mood support.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Omega-3 Fish Oil 1200mg — 100 Caps", "price": 140, "category": "Supplements", "brand": "Nature Made", "desc": "Purified fish oil, 720mg EPA + DHA per serving. Heart and brain health.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1545205597-3d9d02c29597")]},
            {"name": "Whey Protein Isolate Chocolate 1kg", "price": 650, "category": "Sports Nutrition", "brand": "Optimum Nutrition", "desc": "25g protein per serving, <1g sugar, fast-absorbing isolate, 33 servings.", "images": [unsplash("1545205597-3d9d02c29597"), unsplash("1518611012118-696072aa579a")]},
            {"name": "Magnesium Glycinate 400mg — 120 Caps", "price": 120, "category": "Supplements", "brand": "Doctor's Best", "desc": "Chelated magnesium for superior absorption. Sleep, muscle, nerve support.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Zinc + Vitamin C Immune Pack 30s", "price": 85, "category": "Vitamins", "brand": "Solgar", "desc": "Zinc 15mg + Vitamin C 500mg combo for daily immune defense.", "images": [unsplash("1598440947619-2c35fc9aa81d"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Collagen Peptides Powder 250g", "price": 280, "category": "Supplements", "brand": "Vital Proteins", "desc": "Hydrolysed bovine collagen Types I & III. Unflavoured, dissolves easily.", "images": [unsplash("1545205597-3d9d02c29597"), unsplash("1556228720-195a672e8a03")]},
            {"name": "Probiotics 50 Billion CFU — 30 Caps", "price": 200, "category": "Supplements", "brand": "Garden of Life", "desc": "50 billion CFU, 23 strains, delayed release capsule, shelf-stable.", "images": [unsplash("1556228720-195a672e8a03"), unsplash("1598440947619-2c35fc9aa81d")]},
            {"name": "Pre-Workout C4 Original — Fruit Punch", "price": 320, "category": "Sports Nutrition", "brand": "Cellucor", "desc": "150mg caffeine, 1.6g beta-alanine, arginine AKG. 30 servings.", "images": [unsplash("1545205597-3d9d02c29597"), unsplash("1518611012118-696072aa579a")]},
            {"name": "BCAA Powder Watermelon 300g", "price": 260, "category": "Sports Nutrition", "brand": "Scivation", "desc": "2:1:1 leucine, isoleucine, valine ratio. 30 servings, fast-absorbing.", "images": [unsplash("1518611012118-696072aa579a"), unsplash("1545205597-3d9d02c29597")]},
        ],
    },

    {
        "username": "vendor_travelgear_gh",
        "email": "travelgear@aca.demo",
        "store_name": "TravelGear Ghana",
        "description": "Luggage, travel accessories, and adventure gear for Ghanaian explorers.",
        "phone": "+233244027027",
        "address": "Airport Residential, Accra",
        "products": [
            {"name": "Rimowa Original Cabin Luggage 36L", "price": 8500, "category": "Luggage", "brand": "Rimowa", "desc": "Signature grooved aluminium shell, multi-wheel system, TSA-approved lock.", "images": [unsplash("1553062407-98eeb64c6a62"), unsplash("1491637639811-60e2756cc1c7")]},
            {"name": "Samsonite Winfield 3 Spinner 28in", "price": 3200, "category": "Luggage", "brand": "Samsonite", "desc": "Hardside polycarbonate, multi-directional spinner wheels, TSA lock.", "images": [unsplash("1491637639811-60e2756cc1c7"), unsplash("1553062407-98eeb64c6a62")]},
            {"name": "Osprey Farpoint 40L Travel Pack", "price": 2800, "category": "Backpacks", "brand": "Osprey", "desc": "Carry-on legal size backpack, stowaway suspension, front-panel access.", "images": [unsplash("1553062407-98eeb64c6a62"), unsplash("1491637639811-60e2756cc1c7")]},
            {"name": "Travel Pillow — Memory Foam Neck", "price": 180, "category": "Travel Accessories", "brand": "TravelGear", "desc": "Contoured memory foam, washable velour cover, compact roll design.", "images": [unsplash("1491637639811-60e2756cc1c7"), unsplash("1553062407-98eeb64c6a62")]},
            {"name": "Universal Travel Adapter — All Regions", "price": 120, "category": "Travel Accessories", "brand": "TravelGear", "desc": "Works in 150+ countries, 4 USB-A ports, 1 USB-C, safety shutters.", "images": [unsplash("1608043152269-423dbba4e7e1"), unsplash("1519389950473-47ba0277781c")]},
            {"name": "Compression Packing Cubes Set of 6", "price": 220, "category": "Travel Accessories", "brand": "TravelGear", "desc": "6 sizes of compression cubes, save 60% space, water-resistant nylon.", "images": [unsplash("1553062407-98eeb64c6a62"), unsplash("1491637639811-60e2756cc1c7")]},
            {"name": "Anti-Theft Crossbody Bag — Black", "price": 680, "category": "Travel Bags", "brand": "PacSafe", "desc": "Slash-proof straps, RFID blocking, locking zips, 6L capacity.", "images": [unsplash("1548036161-18c0fd738c60"), unsplash("1547949003-9792a18a2b38")]},
            {"name": "Portable Luggage Scale — Digital", "price": 55, "category": "Travel Accessories", "brand": "TravelGear", "desc": "0-50kg digital display, tare function, travel-size, AA battery included.", "images": [unsplash("1491637639811-60e2756cc1c7"), unsplash("1553062407-98eeb64c6a62")]},
            {"name": "RFID Blocking Passport Holder", "price": 85, "category": "Travel Accessories", "brand": "TravelGear", "desc": "Genuine leather, holds 2 passports, cards, boarding passes. RFID-shielded.", "images": [unsplash("1553062407-98eeb64c6a62"), unsplash("1548036161-18c0fd738c60")]},
            {"name": "Travel Toiletry Bag — Clear TSA", "price": 65, "category": "Travel Accessories", "brand": "TravelGear", "desc": "TSA-approved clear bag, 1L capacity, durable PVC, double-zip.", "images": [unsplash("1491637639811-60e2756cc1c7"), unsplash("1553062407-98eeb64c6a62")]},
        ],
    },

    {
        "username": "vendor_petparadise_gh",
        "email": "petparadise@aca.demo",
        "store_name": "Pet Paradise Ghana",
        "description": "Pet food, accessories, and care products for Ghana's pet lovers.",
        "phone": "+233244028028",
        "address": "Roman Ridge, Accra",
        "products": [
            {"name": "Royal Canin German Shepherd Adult 15kg", "price": 980, "category": "Dog Food", "brand": "Royal Canin", "desc": "Breed-specific kibble for German Shepherds. Joint, coat, and digestive support.", "images": [unsplash("1587300003388-59208cc962cb"), unsplash("1548199973-03cce0bbc87b")]},
            {"name": "Purina Pro Plan Cat Food Salmon 8kg", "price": 650, "category": "Cat Food", "brand": "Purina", "desc": "High-protein salmon formula, omega-3 for coat, live probiotics for digestion.", "images": [unsplash("1548199973-03cce0bbc87b"), unsplash("1587300003388-59208cc962cb")]},
            {"name": "Large Dog Crate — 107cm Foldable", "price": 750, "category": "Dog Accessories", "brand": "Pet Paradise", "desc": "Heavy-duty wire crate, double-door, divider panel, removable tray.", "images": [unsplash("1587300003388-59208cc962cb"), unsplash("1548199973-03cce0bbc87b")]},
            {"name": "Adjustable Dog Harness — Medium", "price": 180, "category": "Dog Accessories", "brand": "Ruffwear", "desc": "Front-clip no-pull harness, reflective trim, padded chest. Medium: 56-69cm.", "images": [unsplash("1548199973-03cce0bbc87b"), unsplash("1587300003388-59208cc962cb")]},
            {"name": "Cat Tree Condo — 180cm Beige", "price": 980, "category": "Cat Accessories", "brand": "Pet Paradise", "desc": "5-level cat tree with hammock, scratching posts, hideaway box, dangling toys.", "images": [unsplash("1587300003388-59208cc962cb"), unsplash("1548199973-03cce0bbc87b")]},
            {"name": "Furminator Deshedding Tool — Large Dog", "price": 280, "category": "Grooming", "brand": "FURminator", "desc": "Stainless steel edge removes loose undercoat, ejector button. Large dogs.", "images": [unsplash("1548199973-03cce0bbc87b"), unsplash("1587300003388-59208cc962cb")]},
            {"name": "Automatic Pet Feeder 5L", "price": 520, "category": "Feeders", "brand": "Pet Paradise", "desc": "Programmable 5L feeder, 15-portion control, voice recording, LCD timer.", "images": [unsplash("1587300003388-59208cc962cb"), unsplash("1548199973-03cce0bbc87b")]},
            {"name": "Dog Shampoo Anti-Tick & Flea 500ml", "price": 75, "category": "Grooming", "brand": "Veterinus", "desc": "Natural anti-parasitic formula with neem and lavender. Safe for puppies.", "images": [unsplash("1548199973-03cce0bbc87b"), unsplash("1587300003388-59208cc962cb")]},
            {"name": "Interactive Dog Puzzle Toy — Level 3", "price": 220, "category": "Toys", "brand": "Nina Ottosson", "desc": "Advanced puzzle feeder, 5 activity zones, dishwasher-safe plastic.", "images": [unsplash("1587300003388-59208cc962cb"), unsplash("1548199973-03cce0bbc87b")]},
            {"name": "Retractable Dog Lead 8m — 50kg Max", "price": 95, "category": "Dog Accessories", "brand": "Flexi", "desc": "Tape lead for large dogs up to 50kg, 8m extension, brake button, ergonomic grip.", "images": [unsplash("1548199973-03cce0bbc87b"), unsplash("1587300003388-59208cc962cb")]},
        ],
    },

]


# ─────────────────────────────────────────────────────────────────────────────
# Management Command
# ─────────────────────────────────────────────────────────────────────────────

class Command(BaseCommand):
    help = "Seed 30 vendors with 10+ products each, real Unsplash images, GHS prices."

    def add_arguments(self, parser):
        parser.add_argument(
            "--clear",
            action="store_true",
            help="Delete existing seed vendor accounts before re-seeding.",
        )

    def handle(self, *args, **options):
        if options["clear"]:
            usernames = [v["username"] for v in VENDORS]
            deleted, _ = User.objects.filter(username__in=usernames).delete()
            self.stdout.write(self.style.WARNING(f"Cleared {deleted} objects."))

        created_vendors = created_products = created_images = 0
        total_vendors = len(VENDORS)

        for vi, vdata in enumerate(VENDORS, 1):
            self.stdout.write(f"\n[{vi}/{total_vendors}] {vdata['store_name']}")

            # ── User ────────────────────────────────────────────────
            user, user_created = User.objects.get_or_create(
                username=vdata["username"],
                defaults={"email": vdata["email"], "is_active": True},
            )
            if user_created:
                user.set_password("demo1234")
                user.save()

            # ── Vendor ──────────────────────────────────────────────
            slug = slugify(vdata["store_name"])
            vendor, vendor_created = Vendor.objects.get_or_create(
                user=user,
                defaults={
                    "store_name": vdata["store_name"],
                    "store_slug": slug,
                    "description": vdata["description"],
                    "phone": vdata.get("phone", ""),
                    "address": vdata.get("address", ""),
                    "is_approved": True,
                },
            )
            if vendor_created:
                created_vendors += 1

            # ── Subscription ────────────────────────────────────────
            now = timezone.now()
            VendorSubscription.objects.get_or_create(
                vendor=vendor,
                defaults={
                    "status": VendorSubscription.STATUS_ACTIVE,
                    "amount_paid": 3500,
                    "currency": "GHS",
                    "activated_at": now,
                    "expires_at": now + timedelta(days=365),
                },
            )

            # ── Products ────────────────────────────────────────────
            for pdata in vdata["products"]:
                product, prod_created = VendorProduct.objects.get_or_create(
                    vendor=vendor,
                    name=pdata["name"],
                    defaults={
                        "description": pdata["desc"],
                        "price": pdata["price"],
                        "currency": "GHS",
                        "category": pdata["category"],
                        "brand": pdata["brand"],
                        "in_stock": True,
                    },
                )

                if not prod_created:
                    self.stdout.write(f"    ~ {pdata['name']} (exists)")
                    continue

                created_products += 1
                self.stdout.write(f"    + {pdata['name']}")

                # ── Download and attach images ───────────────────────
                image_urls = pdata.get("images", [])
                position = 0
                for img_url in image_urls:
                    safe_name = slugify(pdata["name"])[:40]
                    filename = f"{safe_name}-{position}.jpg"
                    file_obj = download_image(img_url, filename)
                    if file_obj:
                        try:
                            ProductImage.objects.create(
                                product=product,
                                image=file_obj,
                                alt_text=pdata["name"],
                                position=position,
                            )
                            created_images += 1
                            position += 1
                        except Exception as exc:
                            self.stdout.write(
                                self.style.WARNING(f"      Image save failed: {exc}")
                            )
                    else:
                        self.stdout.write(
                            self.style.WARNING(f"      Could not download image: {img_url}")
                        )

        self.stdout.write(
            self.style.SUCCESS(
                f"\n✓ Done! {created_vendors} vendors, "
                f"{created_products} products, "
                f"{created_images} images created."
            )
        )
        self.stdout.write(
            "All vendor passwords: demo1234\n"
            "Run: python manage.py seed_vendors --clear   to reset."
        )