// Molara — hash router + nav helpers
// Maps slot IDs (used by existing dc-focus events) → routes.

const ROUTE_MAP = {
  // Public
  'public/home':     '/',
  'auth/signin':     '/signin',
  'public/find':     '/find',

  // Booking
  'booking/book':    '/book',
  'booking/instant': '/instant',
  'booking/confirmed': '/confirmed',

  // Portal
  'portal/dash':     '/dashboard',
  'portal/appts':    '/appointments',
  'portal/records':  '/records',
  'portal/pay':      '/payments',
  'portal/profile':  '/profile',

  // Visit
  'visit/live':      '/visit',
  'visit/post':      '/visit/summary',
};

function slotToRoute(slotId) {
  return ROUTE_MAP[slotId] || '/';
}

function navigate(routeOrSlot) {
  const route = routeOrSlot.startsWith('/') ? routeOrSlot : slotToRoute(routeOrSlot);
  window.location.hash = route;
}

function useRoute() {
  const get = () => window.location.hash.replace(/^#/, '') || '/';
  const [route, setRoute] = React.useState(get());
  React.useEffect(() => {
    const fn = () => setRoute(get());
    window.addEventListener('hashchange', fn);
    // Listen for legacy dc-focus events from sub-components
    const onFocus = (e) => {
      const slot = e.detail?.slotId;
      if (slot && ROUTE_MAP[slot]) navigate(ROUTE_MAP[slot]);
    };
    window.addEventListener('dc-focus', onFocus);
    return () => {
      window.removeEventListener('hashchange', fn);
      window.removeEventListener('dc-focus', onFocus);
    };
  }, []);
  return route;
}

window.navigate = navigate;
window.useRoute = useRoute;
window.ROUTE_MAP = ROUTE_MAP;
