import type { Product, Category, ProductCatalog, ProductVariant, Logistics } from "./types"; /** * Mock Master JSON — symuluje odpowiedź backendu Systemu A (Vilmax Cockpit). * Schema per doc/demo/01-vilmax-architecture.md §4. * * Assety: * - Zdjęcia: Unsplash (premium stock, darmowe komercyjnie) * - Wideo 9:16: RunComfy Wan 2.1 (wygenerowane przez MCP, request d6b54037) * * Kolory swatchy i nazwy kolekcji inspirowane benchmarkiem Bobochic Paris * (docs/demo/zwiad-bobochic-2026-08-27.md §8.1, §8.3). */ // Wideo 9:16 — lokalne pliki (konwersja webm→mp4 dla iOS Safari) // .webm = desktop (Chrome/Firefox/Edge), .mp4 = iOS Safari const VIDEO_LAVENA_SOURCES = [ { src: "/video/lavena-boucle.webm", type: "video/webm" }, { src: "/video/lavena-boucle.mp4", type: "video/mp4" }, ]; // Fallback: użyj ten sam lokalny plik dla wszystkich wariantów // Fallback reel dla produktów, które nie mają własnego wideo const VIDEO_FALLBACK_SOURCES = VIDEO_LAVENA_SOURCES; const VIDEO_OSKAR_SOURCES = [ { src: "/video/oskar-reel.webm", type: "video/webm" }, { src: "/video/oskar-reel.mp4", type: "video/mp4" }, ]; const unsplash = (id: string, w = 1600, h = 1200) => `https://images.unsplash.com/${id}?fm=jpg&q=80&w=${w}&h=${h}&auto=format&fit=crop`; export const products: ProductCatalog = [ // ───────────────────────────────────────────────────────────────────────── // PRODUKT 1: Narożnik LAVENA (kolekcja nazwana, premium, 6 wariantów) // ───────────────────────────────────────────────────────────────────────── { sku: "VIL-LAV-BOUCLE", name: "Narożnik Lavena", collection: "LAVENA", category_slug: "narozniki", category_name: "Narożniki", base_price: 4500, compare_at_price: 4990, description: "Paryski design spotyka bezkompromisową wygodę. Lavena to narożnik klasy premium, w którym każdy detal został przemyślany — od ręcznie układanych sprężyn falistych po welurowe bouclé. Asymetryczna bryła z funkcją spania sprawia, że salon staje się przestrzenią do życia, nie tylko do siedzenia.", tech_specs: [ "Pianka HR 30 kg/m³", "Sprężyny faliste", "Tkanina łatwoczyszcząca", "Funkcja spania 200×140 cm", "Stelaż listwowy", "Nogi drewniane bukowe", "Produkcja Europa", ], logistics: { dimensions: { width: 240, depth: 160, height: 85 }, packages: [ { id: "Paczka 1", dimensions: "150x90x70 cm", weight: "45 kg" }, { id: "Paczka 2", dimensions: "100x90x70 cm", weight: "30 kg" }, ], }, badge: "Bestseller", rating: 4.8, reviews_count: 127, variants: [ { sku: "LAV-BOU-BEIGE", color_name: "Beżowe Bouclé", swatch_color: "#EAE3D2", fabric_type: "Tissu bouclette", media: { hero_staging: unsplash("photo-1534595038511-9f219fe0c979"), packshot: unsplash("photo-1776653095063-895a05001818"), video_reels: VIDEO_LAVENA_SOURCES, fabric_closeup: unsplash("photo-1776482128012-a47f853abd57"), }, }, { sku: "LAV-VEL-VERT", color_name: "Zielony Welur", swatch_color: "#3D5A3E", fabric_type: "Velours côtelé", media: { hero_staging: unsplash("photo-1555041469-a586c61ea9bc"), packshot: unsplash("photo-1760067538299-3f58e7a99fc5"), video_reels: VIDEO_FALLBACK_SOURCES, fabric_closeup: unsplash("photo-1776482128012-a47f853abd57"), }, }, { sku: "LAV-VEL-NOIR", color_name: "Czarny Welur", swatch_color: "#1a1a1a", fabric_type: "Velours", media: { hero_staging: unsplash("photo-1765728614529-4749706523d9"), packshot: unsplash("photo-1540574163026-643ea20ade25"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "LAV-BOU-TAUPE", color_name: "Taupe Bouclé", swatch_color: "#8B7D6B", fabric_type: "Tissu bouclette", media: { hero_staging: unsplash("photo-1776653095063-895a05001818"), packshot: unsplash("photo-1555041469-a586c61ea9bc"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "LAV-LIS-ROSE", color_name: "Różowy Lisse", swatch_color: "#D4A8B0", fabric_type: "Tissu lisse", media: { hero_staging: unsplash("photo-1524758631624-e2822e304c36"), packshot: unsplash("photo-1776653095063-895a05001818"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "LAV-LIS-BLEU", color_name: "Granat Lisse", swatch_color: "#0F1F3D", fabric_type: "Tissu lisse", media: { hero_staging: unsplash("photo-1772475385289-17fbb414ed74"), packshot: unsplash("photo-1540574163026-643ea20ade25"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, ], }, // ───────────────────────────────────────────────────────────────────────── // PRODUKT 2: Sofa panoramique SIDONIE (5-osobowa, 4 warianty) // ───────────────────────────────────────────────────────────────────────── { sku: "VIL-SID-CHINE", name: "Sofa panoramique Sidonie", collection: "SIDONIE", category_slug: "sofy", category_name: "Sofy", base_price: 3990, description: "Sidonie to sofistykowana panorama, która zmienia proporcje salonu. Pięć miejsc do siedzenia, modułowa bryła i schowek na pościel ukryty w podniesionym siedzisku. Tkanina chiné o zmiennej fakturze gra światłem w zależności od pory dnia.", tech_specs: [ "Pianka HR 35 kg/m³", "Sprężyny kieszeniowe", "Tkanina chiné 100% polyester", "Schowek na pościel", "5 miejsc do siedzenia", "Martindale 45 000 cykli", "Produkcja Europa", ], logistics: { dimensions: { width: 383, depth: 151, height: 95 }, packages: [ { id: "Paczka 1", dimensions: "200x110x40 cm", weight: "62 kg" }, { id: "Paczka 2", dimensions: "180x90x30 cm", weight: "38 kg" }, { id: "Paczka 3", dimensions: "120x80x25 cm", weight: "24 kg" }, ], }, badge: "Nowość", rating: 4.6, reviews_count: 54, variants: [ { sku: "SID-CHI-BEIGE", color_name: "Beż Chiné", swatch_color: "#EAE3D2", fabric_type: "Tissu chiné", media: { hero_staging: unsplash("photo-1776653095063-895a05001818"), packshot: unsplash("photo-1534595038511-9f219fe0c979"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "SID-CHI-TAUPE", color_name: "Taupe Chiné", swatch_color: "#8B7D6B", fabric_type: "Tissu chiné", media: { hero_staging: unsplash("photo-1776653095063-895a05001818"), packshot: unsplash("photo-1760067538299-3f58e7a99fc5"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "SID-CHI-VERT", color_name: "Zielony Chiné", swatch_color: "#3D5A3E", fabric_type: "Tissu chiné", media: { hero_staging: unsplash("photo-1555041469-a586c61ea9bc"), packshot: unsplash("photo-1540574163026-643ea20ade25"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "SID-CHI-BLEU", color_name: "Granat Chiné", swatch_color: "#0F1F3D", fabric_type: "Tissu chiné", media: { hero_staging: unsplash("photo-1772475385289-17fbb414ed74"), packshot: unsplash("photo-1765728614529-4749706523d9"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, ], }, // ───────────────────────────────────────────────────────────────────────── // PRODUKT 3: Łóżko tapicerowane MARA (z funkcją spania, 3 warianty) // ───────────────────────────────────────────────────────────────────────── { sku: "VIL-MAR-TEX", name: "Łóżko tapicerowane Mara", collection: "MARA", category_slug: "lozka", category_name: "Łóżka", base_price: 2190, compare_at_price: 2490, description: "Mara to łóżko z funkcją spania i schowkiem na pościel — rozwiązanie dla sypialni, która chce być też salonem. Wysokie, miękkie wezgłowie w tkaninie texturé zaprasca do czytania, a mechanizm podnoszenia ułatwia dostęp do pościeli.", tech_specs: [ "Pianka HR 30 kg/m³", "Stelaż listwowy", "Tkanina texturé 100% polyester", "Schowek na pościel", "Materac 160×200 cm (nie w zestawie)", "Wzgłowie 120 cm wysokości", "Produkcja Europa", ], logistics: { dimensions: { width: 175, depth: 215, height: 120 }, packages: [ { id: "Paczka 1", dimensions: "180x90x30 cm", weight: "48 kg" }, { id: "Paczka 2", dimensions: "120x60x20 cm", weight: "22 kg" }, ], }, badge: "Bestseller", rating: 4.7, reviews_count: 89, variants: [ { sku: "MAR-TEX-BEIGE", color_name: "Beż Texturé", swatch_color: "#EAE3D2", fabric_type: "Tissu texturé", media: { hero_staging: unsplash("photo-1722942717941-210f6a0acb45"), packshot: unsplash("photo-1766733041960-0de62f403e7b"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "MAR-TEX-TAUPE", color_name: "Taupe Texturé", swatch_color: "#8B7D6B", fabric_type: "Tissu texturé", media: { hero_staging: unsplash("photo-1766733041960-0de62f403e7b"), packshot: unsplash("photo-1722942717941-210f6a0acb45"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, { sku: "MAR-TEX-NOIR", color_name: "Czarny Texturé", swatch_color: "#1a1a1a", fabric_type: "Tissu texturé", media: { hero_staging: unsplash("photo-1775241186452-c3d99b09f223"), packshot: unsplash("photo-1722942717941-210f6a0acb45"), video_reels: VIDEO_FALLBACK_SOURCES, }, }, ], }, ]; // ───────────────────────────────────────────────────────────────────────── // PRODUKT 4: Narożnik rozkładany OSKAR — 17 kolorów TILIA, Lewy / Prawy // ───────────────────────────────────────────────────────────────────────── const TILIA_COLORS = [ { code: "01", name: "TILIA 01 — ecru", hex: "#e6dcd2" }, { code: "03", name: "TILIA 03 — beż jasny", hex: "#d3ccb8" }, { code: "08", name: "TILIA 08 — beż piaskowy", hex: "#c8b287" }, { code: "11", name: "TILIA 11 — camel jasny", hex: "#ae9a7f" }, { code: "17", name: "TILIA 17 — taupe", hex: "#9c8475" }, { code: "37", name: "TILIA 37 — oliwka", hex: "#696c5b" }, { code: "39", name: "TILIA 39 — zieleń butelkowa", hex: "#334840" }, { code: "52", name: "TILIA 52 — cegła", hex: "#774235" }, { code: "56", name: "TILIA 56 — karmel", hex: "#a47553" }, { code: "62", name: "TILIA 62 — róż przykurzony", hex: "#aa8280" }, { code: "75", name: "TILIA 75 — petrol", hex: "#336674" }, { code: "77", name: "TILIA 77 — granat", hex: "#263447" }, { code: "83", name: "TILIA 83 — grege", hex: "#b3aaa0" }, { code: "85", name: "TILIA 85 — szary", hex: "#666e73" }, { code: "86", name: "TILIA 86 — szary jasny", hex: "#999997" }, { code: "90", name: "TILIA 90 — grafit", hex: "#6b6f72" }, { code: "100", name: "TILIA 100 — czarny", hex: "#1f2024" }, ]; function buildOskarVariants(side: "L" | "P"): ProductVariant[] { const sidePrefix = side === "L" ? "oskar-left" : "oskar"; return TILIA_COLORS.map((color) => ({ sku: `VIL-OSK-${side}-${color.code}`, color_name: color.name, swatch_color: color.hex, fabric_type: "sztruks / welur prążkowany", media: { hero_staging: `/products/oskar/${sidePrefix}-hero.jpg`, packshot: `/products/oskar/${sidePrefix}-packshot.jpg`, packshot_3q: `/products/oskar/${sidePrefix}-packshot-3q.jpg`, side_profile: `/products/oskar/${sidePrefix}-side.jpg`, sleeping_function: `/products/oskar/${sidePrefix}-sleeping.jpg`, storage_detail: `/products/oskar/${sidePrefix}-storage.jpg`, fabric_closeup: `/products/oskar/tilia-${color.code}.jpg`, gallery: [ `/products/oskar/${sidePrefix}-top-iso.jpg`, `/products/oskar/tilia-${color.code}-vilmax-photo.jpg`, ], video_reels: VIDEO_OSKAR_SOURCES, }, })); } const OSKAR_DESCRIPTION = "OSKAR to rozkładany narożnik z funkcją spania i pojemnikiem na pościel. " + "Masywna, stabilna konstrukcja oparta na drewnianym stelażu i płycie meblowej, " + "z pianką HR i HD zapewnia wygodę zarówno w pozycji siedzącej, jak i leżącej. " + "Powierzchnia spania 135×190 cm pozwala wykorzystać go jako pełnoprawne łóżko dla gości."; const OSKAR_TECH_SPECS = [ "Wymiary zewnętrzne: 257×151×88 cm", "Powierzchnia spania: 135×190 cm", "Pianka HR + HD + owata", "Stelaż: drewno lite + płyta meblowa", "Tkanina TILIA (Davis): 100% PES, 420 g/m²", "Martindale: 90 000–100 000 cykli", "Pojemnik na pościel: 105 l", "Maksymalne obciążenie: 350 kg", "Gwarancja: 24 miesiące", "Produkt Polski", ]; const OSKAR_LOGISTICS: Logistics = { dimensions: { width: 257, depth: 151, height: 88 }, packages: [ { id: "Paczka 1", dimensions: "132x153x74 cm", weight: "71 kg" }, { id: "Paczka 2", dimensions: "97x88x62 cm", weight: "39 kg" }, ], }; products.push( { sku: "VIL-OSK-P", name: "Narożnik rozkładany OSKAR — Prawy", collection: "OSKAR", category_slug: "narozniki", category_name: "Narożniki", base_price: 3990, compare_at_price: 4990, description: OSKAR_DESCRIPTION, tech_specs: OSKAR_TECH_SPECS, logistics: OSKAR_LOGISTICS, badge: "Nowość", rating: 4.7, reviews_count: 12, variants: buildOskarVariants("P"), }, { sku: "VIL-OSK-L", name: "Narożnik rozkładany OSKAR — Lewy", collection: "OSKAR", category_slug: "narozniki", category_name: "Narożniki", base_price: 3990, compare_at_price: 4990, description: OSKAR_DESCRIPTION, tech_specs: OSKAR_TECH_SPECS, logistics: OSKAR_LOGISTICS, badge: "Nowość", rating: 4.7, reviews_count: 12, variants: buildOskarVariants("L"), }, ); export const categories: Category[] = [ { slug: "narozniki", name: "Narożniki", description: "Narożniki klasy premium — asymetryczne bryły, funkcja spania, welurowe bouclé. Make-to-Order, szyte na wymiar.", product_skus: ["VIL-LAV-BOUCLE", "VIL-OSK-P", "VIL-OSK-L"], }, { slug: "sofy", name: "Sofy", description: "Sofy panoramique i modułowe. Pięć miejsc do siedzenia, schowki na pościel, tkaniny chiné o zmiennej fakturze.", product_skus: ["VIL-SID-CHINE"], }, { slug: "lozka", name: "Łóżka", description: "Łóżka tapicerowane z funkcją spania. Wysokie miękkie wezgłowie, schowek na pościel, mechanizm podnoszenia.", product_skus: ["VIL-MAR-TEX"], }, ]; // ── Helpery dostępowe (symulacja warstwy API Systemu A) ────────────────── export function getProductBySku(sku: string): Product | undefined { return products.find((p) => p.sku === sku); } export function getProductsByCategory(slug: string): Product[] { return products.filter((p) => p.category_slug === slug); } export function getCategoryBySlug(slug: string): Category | undefined { return categories.find((c) => c.slug === slug); } export function getVariantBySku( product: Product, variantSku: string, ) { return product.variants.find((v) => v.sku === variantSku); } export function getAllProducts(): ProductCatalog { return products; }