'use client';

import { useEffect } from 'react';
import { usePathname } from 'next/navigation';

import { type BreadcrumbHint, useBreadcrumbStore } from '@/stores/breadcrumb-store';

/**
 * Detail pages call this on mount to register their entity hierarchy
 * for the topbar breadcrumb. Pass a stable hint object (or memoise the
 * inputs) so the effect doesn't re-fire every render.
 *
 * Example (interest detail page):
 *   useBreadcrumbHint({
 *     parents: [{ label: 'Mary Smith', href: '/port/clients/abc' }],
 *     current: 'B17',
 *   });
 *
 * The hint clears when the page unmounts so a stale hierarchy doesn't
 * leak into the next route.
 */
export function useBreadcrumbHint(hint: BreadcrumbHint | null | undefined): void {
  const pathname = usePathname();
  const setHint = useBreadcrumbStore((s) => s.setHint);
  const clearHint = useBreadcrumbStore((s) => s.clearHint);

  // Stringify for stable equality — caller can pass an object literal
  // each render without wrecking effect deps. The serialized form is
  // tiny (handful of strings) so this is cheap.
  const serialized = hint ? JSON.stringify(hint) : null;

  useEffect(() => {
    if (!serialized || !hint) return;
    setHint(pathname, hint);
    return () => {
      clearHint(pathname);
    };
    // serialized stands in for `hint` value-equality; pathname triggers
    // re-register if the page navigates without unmounting (rare but
    // possible on client-side route swaps within the same layout).
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [serialized, pathname, setHint, clearHint]);
}
