/** * Profil treści ofertowej per produkt — nazwy, model, tkanina i wersja copy. * Wszystko, co wcześniej było zaszyte na OSKAR-a, czytane stąd: dodanie * kolejnego produktu = jeden wpis w mapie, nie zmiana domeny. */ export interface ProductProfile { slug: string; /** token modelu w nazwach/SKU/tekstach: "OSKAR" | "FUJI" */ model: string; /** forma dopełniacza do fraz typu „Wymiary …-a to” (FUJI nieodmienne) */ modelGen: string; /** etykieta rodzaju w tytułach wariantów: „Narożnik” */ kindLabel: string; /** nazwa tkaniny do tytułów rodzica i etykiet przeglądu: „TILIA” | „ARENA” */ fabricName: string; /** wersja receptury copy — zapis w provenance wersji treści */ copyVersion: string; } const PROFILES: Record = { oskar: { slug: "oskar", model: "OSKAR", modelGen: "OSKAR-a", kindLabel: "Narożnik", fabricName: "TILIA", copyVersion: "oskar-copy-v1", }, "oskar-lumo": { slug: "oskar-lumo", model: "OSKAR", modelGen: "OSKAR-a", kindLabel: "Narożnik", fabricName: "LUMO", copyVersion: "oskar-copy-v1", }, "oskar-tilia": { slug: "oskar-tilia", model: "OSKAR", modelGen: "OSKAR-a", kindLabel: "Narożnik", fabricName: "TILIA", copyVersion: "oskar-copy-v1", }, fuji: { slug: "fuji", model: "FUJI", modelGen: "FUJI", kindLabel: "Narożnik", fabricName: "ARENA", copyVersion: "fuji-copy-v1", }, }; export function productProfile(slug: string | undefined | null): ProductProfile | null { return slug ? PROFILES[slug] ?? null : null; } export function offerProfile(product: { slug: string; name: string }, kind = "Mebel"): ProductProfile { return productProfile(product.slug) ?? { slug: product.slug, model: product.name, modelGen: product.name, kindLabel: ({ "corner-sofa": "Narożnik", sofa: "Sofa", armchair: "Fotel" } as Record)[kind] ?? kind, fabricName: "", copyVersion: "generic-copy-v1", }; } /** * SKU wariantu z potwierdzonego wzorca faktu commerce.sku_pattern. * Wzorzec musi zawierać „{kod}” (odcień); „{L|P}” (strona) jest opcjonalny — * produkty bez stron (sofa/fotel) mogą go pominąć, np. „VIL-JOS-TIL{kod}”. * „VIL-OSK-{L|P}-TIL{kod}” → „VIL-OSK-P-TIL86”. * Nieznany format → null (treści raportują brak SKU, nic nie zgadujemy). */ export function skuFromPattern(pattern: string | null, side: string, shadeCode: string): string | null { if (!pattern || !pattern.includes("{kod}")) return null; return pattern.replace("{L|P}", side).replace("{kod}", shadeCode); }