import { useEffect, useMemo, useState } from 'react'; import { DataPanel } from '../components/DataPanel'; import { ManagementLayout } from '../components/ManagementLayout'; import { ManagementTable } from '../components/ManagementTable'; import { MetricGrid } from '../components/MetricGrid'; import { adminMetrics, aiContentRows, areaRows, userRows } from '../services/managementMocks'; import { getAccessOptions, getAccessUsers, updateUserAccess } from '../services/adminAccessService'; import { useViewport } from '../../../shared/hooks/useViewport'; import { getCurrentUserDisplay } from '../../auth/services/sessionService'; const areaColumns = [ { key: 'name', label: 'Area' }, { key: 'owner', label: 'Responsavel' }, { key: 'members', label: 'Usuarios' }, { key: 'status', label: 'Status' }, ]; const contentColumns = [ { key: 'title', label: 'Conteudo' }, { key: 'area', label: 'Area' }, { key: 'status', label: 'Status' }, { key: 'updatedAt', label: 'Atualizado' }, ]; const selectStyle = { width: '100%', border: '1px solid var(--color-border)', borderRadius: '14px', padding: '0.75rem 0.85rem', background: '#fff', color: 'var(--color-text)', fontWeight: 600, }; function mapMockUsers() { return userRows.map((user) => ({ id: user.id, nome: user.name, email: user.email, perfilPrincipal: { id: user.role, nome: user.role }, areaPrincipal: { id: user.area, nome: user.area }, accessStatus: 'assigned', })); } export function AdminPage() { const { isDesktop, isMobile } = useViewport(); const userDisplay = getCurrentUserDisplay(); const [users, setUsers] = useState(mapMockUsers); const [profiles, setProfiles] = useState([]); const [areas, setAreas] = useState([]); const [isLoadingAccess, setIsLoadingAccess] = useState(true); const [accessError, setAccessError] = useState(''); useEffect(() => { let isMounted = true; async function loadAccessData() { try { const [options, accessUsers] = await Promise.all([getAccessOptions(), getAccessUsers()]); if (!isMounted) { return; } setProfiles(options.profiles || []); setAreas(options.areas || []); setUsers(accessUsers || []); setAccessError(''); } catch { if (isMounted) { setAccessError('Backend indisponivel. Exibindo dados demonstrativos.'); } } finally { if (isMounted) { setIsLoadingAccess(false); } } } loadAccessData(); return () => { isMounted = false; }; }, []); async function handleAccessChange(user, field, value) { const currentPerfilId = user.perfilPrincipal?.id || null; const currentAreaId = user.areaPrincipal?.id || null; const nextAccess = { perfilId: field === 'perfil' ? Number(value) || null : currentPerfilId, areaId: field === 'area' ? Number(value) || null : currentAreaId, }; setUsers((current) => current.map((item) => item.id === user.id ? { ...item, perfilPrincipal: profiles.find((profile) => profile.id === nextAccess.perfilId) || null, areaPrincipal: areas.find((area) => area.id === nextAccess.areaId) || null, accessStatus: nextAccess.perfilId && nextAccess.areaId ? 'assigned' : 'unassigned', } : item, ), ); try { const updatedUser = await updateUserAccess(user.id, nextAccess); if (updatedUser) { setUsers((current) => current.map((item) => (item.id === updatedUser.id ? updatedUser : item)), ); } setAccessError(''); } catch { setAccessError('Nao foi possivel salvar a atribuicao. Confira o backend.'); } } const userColumns = useMemo( () => [ { key: 'nome', label: 'Usuario', render: (row) => (