// @design-system: layout/TopBar
/**
 * TopBar - sticky application top bar.
 *
 * Variants:
 *  - customer: surface-app background (brand-neutral chrome)
 *  - vendor:   surface-app background (vendor context; accent via slot content)
 *
 * Background is always var(--color-surface-app) with shadow-sm — no gradient.
 * Gradient was removed in redesign-d to unify chrome appearance.
 *
 * @example
 * <TopBar
 *   variant="customer"
 *   title="Multideal"
 *   subtitle={t('half_price_deals')}
 *   endSlot={<LanguageToggle />}
 * />
 */

import { type ReactNode } from 'react';
import { cn } from '@/lib/cn';
import { useSyncExternalStore } from 'react';
import {
  getNavSpeedServerSnapshot,
  getNavSpeedSnapshot,
  subscribeNavSpeed,
} from '@/lib/nav/nav-speed';

export interface TopBarProps {
  /** Drives gradient color: blue (customer) or green (vendor). */
  variant?: 'customer' | 'vendor';
  /** Primary heading text. */
  title?: string;
  /** Secondary sub-heading text. */
  subtitle?: string;
  /** Slot rendered at the logical start (inline-start, right in RTL Hebrew). */
  startSlot?: ReactNode;
  /** Slot rendered at the logical end (inline-end). */
  endSlot?: ReactNode;
  className?: string;
}

export function TopBar({
  variant: _variant = 'customer',
  title,
  subtitle,
  startSlot,
  endSlot,
  className,
}: TopBarProps) {
  const navSpeed = useSyncExternalStore(
    subscribeNavSpeed,
    getNavSpeedSnapshot,
    getNavSpeedServerSnapshot,
  );

  return (
    <header
      data-testid="smart-top-bar"
      data-nav-topbar-visible={navSpeed.topBarVisible ? 'true' : 'false'}
      className={cn(
        'sticky top-0 z-[var(--z-sticky)]',
        'flex items-center justify-between gap-3',
        'px-4 py-2',
        'min-h-11',
        'pt-[max(var(--safe-area-top,0px),theme(spacing.2))]',
        'ps-[var(--safe-area-start)]',
        'pe-[var(--safe-area-end)]',
        'bg-[var(--color-surface-app)] shadow-sm',
        'transition-transform duration-[var(--duration-base)] ease-[var(--ease-emphasized)]',
        navSpeed.topBarVisible ? 'translate-y-0' : '-translate-y-full',
        className,
      )}
    >
      {startSlot && <div className="flex shrink-0 items-center">{startSlot}</div>}

      <div className="flex min-w-0 flex-1 flex-col">
        {title && (
          <span className="truncate text-lg leading-[var(--line-height-tight)] font-bold">
            {title}
          </span>
        )}
        {subtitle && (
          <span className="truncate text-sm leading-[var(--line-height-snug)] opacity-80">
            {subtitle}
          </span>
        )}
      </div>

      {endSlot && <div className="flex shrink-0 items-center">{endSlot}</div>}
    </header>
  );
}
