'use client'; import { useAuthStore } from '@/stores/auth-store'; import { useSubscription } from './use-subscription'; import { getSubscriptionState, isGlobalAdminRfc } from '@horux/shared'; /** * Hrefs siempre disponibles cuando la suscripción está vencida — el user puede * llegar a renovar y ajustar configuración. Todo lo demás se oculta del sidebar. */ const ALWAYS_ALLOWED_HREFS = new Set([ '/configuracion', '/configuracion/planes-despacho', '/configuracion/suscripcion', '/mis-empresas', ]); export function useNavGate() { const { user } = useAuthStore(); const { data: subscription } = useSubscription(user?.tenantId); const isGlobalAdmin = isGlobalAdminRfc( user?.tenantRfc, user?.role || 'visor', user?.platformRoles, ); // Admin global nunca queda bloqueado — opera vía impersonación de tenants. // Mientras la query de subscription está pending, NO bloqueamos para evitar // un flicker (sidebar completo → colapso → completo) en cada navegación. const needsRenewal = !isGlobalAdmin && subscription !== undefined && getSubscriptionState(subscription).needsRenewal; const isAllowed = (href: string): boolean => { if (!needsRenewal) return true; // Permitir prefix-match para que rutas como /configuracion/usuarios/edit sigan // siendo accesibles si están bajo /configuracion (pero NO cualquier otro path). for (const allowed of ALWAYS_ALLOWED_HREFS) { if (href === allowed || href.startsWith(`${allowed}/`)) return true; } return false; }; return { needsRenewal, isAllowed }; }