'use client'; import React from 'react'; import Link from 'next/link'; import { getImageUrl } from '@/lib/utils'; import { requireLoginForCheckout } from '@/lib/requireLoginForCheckout'; import type { MegaMenuBadge, MegaMenuData } from '@/services/api/storefrontService'; type BadgeKind = MegaMenuBadge; type MegaLink = { label: string; href: string; badge?: BadgeKind; accent?: boolean; }; type MegaGroup = { title: string; links: MegaLink[]; }; const BADGE_STYLES: Record = { new: 'bg-[#e8f5e9] text-[#43a047]', hot: 'bg-[#ffebee] text-[#e57373]', trending: 'bg-[#e3f2fd] text-[#1976d2]', featured: 'bg-[#e0f7fa] text-[#00acc1]', }; const BADGE_LABEL: Record = { new: 'NEW', hot: 'HOT', trending: 'TRENDING', featured: 'FEATURED', }; function parseBadge(value: unknown): BadgeKind | undefined { const v = String(value || '') .toLowerCase() .trim(); if (v === 'hot' || v === 'new' || v === 'trending' || v === 'featured') { return v; } return undefined; } export function hasCmsMegaGroups(menu?: MegaMenuData | null): boolean { return Boolean( menu?.groups?.some( (group) => Array.isArray(group?.links) && group.links.some((link) => link?.label && link?.href) ) ); } export function normalizeCmsMegaMenu(menu: MegaMenuData): { groups: MegaGroup[]; promo: NonNullable | null; } { const groups: MegaGroup[] = (menu.groups || []) .map((group) => ({ title: String(group.title || '').trim(), links: (group.links || []) .filter((link) => link?.label && link?.href) .map((link) => { const href = String(link.href).trim(); const label = String(link.label).trim(); return { label, href, badge: parseBadge(link.badge), accent: Boolean(link.accent), }; }), })) .filter((group) => group.links.length > 0); const promo = menu.promo; const hasPromo = Boolean( promo && (promo.image_url || promo.title || promo.badge || promo.href) ); return { groups, promo: (hasPromo && promo) ? promo : null }; } function MegaBadge({ kind }: { kind: BadgeKind }) { return ( {BADGE_LABEL[kind]} ); } function MegaColumn({ title, links }: MegaGroup) { return (
{title ? (

{title}

) : null}
    {links.map((item) => (
  • {item.href === '/checkout' ? ( ) : ( {item.label} {item.badge ? : null} )}
  • ))}
); } function PromoCard({ promo, }: { promo: NonNullable; }) { const href = promo.href || '/shop'; const image = getImageUrl(promo.image_url); return (
{promo.badge ? ( {promo.badge} ) : null} {promo.title ? (

{promo.title}

) : null}
); } export function CmsMegaMenuPanel({ menu }: { menu: MegaMenuData }) { const { groups, promo } = normalizeCmsMegaMenu(menu); if (groups.length === 0 && !promo) return null; const colCount = groups.length + (promo ? 1 : 0); const gridClass = colCount >= 4 ? 'lg:grid-cols-[repeat(3,minmax(0,1fr))_minmax(200px,240px)]' : colCount === 3 ? 'lg:grid-cols-3' : colCount === 2 ? 'lg:grid-cols-2' : 'lg:grid-cols-1'; return (
{groups.map((group) => ( ))} {promo ? : null}
); }