// // src/hooks/usePermissions.ts
// import { useState, useEffect, useMemo } from 'react';
// import {
//   getUserPermissionsGroupedByModule,
//   buildPermissionMap,
//   getVisibleColumns,
//   getRecordFilter,
//   hasPermission,
//   type PermissionMap,
// } from '@/lib/api/userPermissions.api';
// import { fetchApi } from '@/lib/api/http';

// function resolveUserId(): { userId: number | null; source: string } {
//   if (typeof window === 'undefined') return { userId: null, source: '' };
//   // 1. localStorage("user")
//   try {
//     const s = localStorage.getItem('user');
//     if (s) {
//       const p = JSON.parse(s);
//       const id = p?.id || p?.userId || p?.user_id;
//       if (id) return { userId: Number(id), source: 'localStorage("user")' };
//     }
//   } catch {}
//   // 2. JWT
//   try {
//     const t = localStorage.getItem('token') || localStorage.getItem('access_token');
//     if (t) {
//       const p = JSON.parse(atob(t.split('.')[1]));
//       const id = p?.id || p?.userId || p?.sub;
//       if (id) return { userId: Number(id), source: 'JWT' };
//     }
//   } catch {}
//   // 3. direct key
//   const direct = localStorage.getItem('userId') || localStorage.getItem('user_id');
//   if (direct) return { userId: Number(direct), source: 'localStorage("userId")' };
//   // 4. cookie
//   // ... etc
//   return { userId: null, source: '' };
// }

// export function usePermissions(moduleSlug: string, fallbackColumns: any[]) {
//   const [moduleConfig, setModuleConfig] = useState<any>(null);
//   const [permissionMap, setPermissionMap] = useState<PermissionMap>({});
//   const [loading, setLoading] = useState(true);
//   const [ready, setReady] = useState(false);
//   const [debugLog, setDebugLog] = useState<string[]>([]);
//   const { userId, source } = useMemo(resolveUserId, []);

//   useEffect(() => {
//     (async () => {
//       setLoading(true);
//       try {
//         // Fetch module config
//         const modules = await fetchApi<any>(`/api/modules`);
//         const list = Array.isArray(modules) ? modules : modules?.data ?? [modules];
//         const mod = list.find((m: any) => m.slug === moduleSlug);
//         setModuleConfig(mod);

//         // Fetch permissions using the GOOD endpoint + helper
//         if (userId) {
//           const grouped = await getUserPermissionsGroupedByModule(userId);
//           setPermissionMap(buildPermissionMap(grouped));
//         }
//         setReady(!!mod && !!userId);
//       } finally {
//         setLoading(false);
//       }
//     })();
//   }, [moduleSlug, userId]);

//   const visibleColumns = useMemo(() => {
//     if (!moduleConfig?.column_config?.length) return fallbackColumns;
//     const all = [...moduleConfig.column_config].sort((a, b) => a.order - b.order);
//     const allowed = getVisibleColumns(permissionMap, moduleSlug);
//     return allowed ? all.filter(c => allowed.includes(c.key)) : all;
//   }, [moduleConfig, permissionMap, moduleSlug, fallbackColumns]);

//   const permittedActions = useMemo(() => {
//     const actions = new Set<string>();
//     Object.keys(permissionMap[moduleSlug] || {}).forEach(a => actions.add(a));
//     return actions;
//   }, [permissionMap, moduleSlug]);

//   const rowButtons = useMemo(
//     () => (moduleConfig?.button_config ?? [])
//       .filter((b: any) => b.position === 'row' && permittedActions.has(b.key))
//       .sort((a: any, b: any) => a.order - b.order),
//     [moduleConfig, permittedActions]
//   );

//   const toolbarButtons = useMemo(
//     () => (moduleConfig?.button_config ?? [])
//       .filter((b: any) => b.position === 'toolbar' && permittedActions.has(b.key))
//       .sort((a: any, b: any) => a.order - b.order),
//     [moduleConfig, permittedActions]
//   );

//   const canViewAll = permittedActions.has('view_all');
//   const recordFilter = useMemo(() => getRecordFilter(permissionMap, moduleSlug), [permissionMap, moduleSlug]);

//   return {
//     moduleConfig,
//     visibleColumns,
//     permittedActions,
//     rowButtons,
//     toolbarButtons,
//     canViewAll,
//     currentUserId: userId,
//     userIdSource: source,
//     loading,
//     ready,
//     useDynamicMode: ready && moduleConfig !== null,
//     debugLog,
//     can: (action: string) => hasPermission(permissionMap, moduleSlug, action),
//     recordFilter,
//   };
// }