'use client';

/**
 * CrossTabRefresher — invisible island that listens for cross-tab mh:changed events
 * and invalidates TanStack Query's mh-page cache so personalization data refreshes.
 *
 * Uses getBrowserQueryClient() directly (shared singleton) so no QueryClientProvider
 * wrapper is needed. Mount once in PublicAppShell with client:idle.
 */

import { useEffect } from 'react';
import { clearBrowserQueryClientForLogout, getBrowserQueryClient } from '@/lib/query/client';
import { listenMhEvents } from './cross-tab-sync';
import { applyMhCookie } from './mh-cookie';

export function CrossTabRefresher() {
  useEffect(() => {
    return listenMhEvents((event) => {
      applyMhCookie();
      window.dispatchEvent(new CustomEvent('mh:changed'));
      if (event.kind === 'logout') {
        clearBrowserQueryClientForLogout();
        return;
      }
      const qc = getBrowserQueryClient();
      if (event.kind === 'mutation') {
        void qc.invalidateQueries();
        return;
      }
      void qc.invalidateQueries({ queryKey: ['mh-page'] });
    });
  }, []);
  return null;
}
