"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { isAuthenticated, getUser, clearAuth } from '@/lib/auth'; interface Agency { id: string; name: string; subdomain: string; domain: string; is_active: boolean; created_at: string; } interface AgencyDetails { access_url: string; tenant: { id: string; name: string; domain: string; subdomain: string; cnpj?: string; razao_social?: string; email?: string; phone?: string; website?: string; address?: string; city?: string; state?: string; zip?: string; description?: string; industry?: string; is_active: boolean; created_at: string; updated_at: string; }; admin?: { id: string; email: string; name: string; role: string; created_at: string; tenant_id?: string; }; } export default function PainelPage() { const router = useRouter(); const [userData, setUserData] = useState(null); const [agencies, setAgencies] = useState([]); const [loading, setLoading] = useState(true); const [loadingAgencies, setLoadingAgencies] = useState(true); const [selectedAgencyId, setSelectedAgencyId] = useState(null); const [selectedDetails, setSelectedDetails] = useState(null); const [detailsLoadingId, setDetailsLoadingId] = useState(null); const [detailsError, setDetailsError] = useState(null); const [deletingId, setDeletingId] = useState(null); useEffect(() => { // Verificar se usuário está logado if (!isAuthenticated()) { router.push('/login'); return; } const user = getUser(); if (user) { // Verificar se é SUPERADMIN if (user.role !== 'SUPERADMIN') { alert('Acesso negado. Apenas SUPERADMIN pode acessar este painel.'); clearAuth(); router.push('/login'); return; } setUserData(user); setLoading(false); loadAgencies(); } else { router.push('/login'); } }, [router]); const loadAgencies = async () => { setLoadingAgencies(true); try { const response = await fetch('/api/admin/agencies'); if (response.ok) { const data = await response.json(); setAgencies(data); if (selectedAgencyId && !data.some((agency: Agency) => agency.id === selectedAgencyId)) { setSelectedAgencyId(null); setSelectedDetails(null); } } else { console.error('Erro ao carregar agências'); } } catch (error) { console.error('Erro ao carregar agências:', error); } finally { setLoadingAgencies(false); } }; const handleViewDetails = async (agencyId: string) => { setDetailsError(null); setDetailsLoadingId(agencyId); setSelectedAgencyId(agencyId); setSelectedDetails(null); try { const response = await fetch(`/api/admin/agencies/${agencyId}`); const data = await response.json(); if (!response.ok) { setDetailsError(data?.error || 'Não foi possível carregar os detalhes da agência.'); setSelectedAgencyId(null); return; } setSelectedDetails(data); } catch (error) { console.error('Erro ao carregar detalhes da agência:', error); setDetailsError('Erro ao carregar detalhes da agência.'); setSelectedAgencyId(null); } finally { setDetailsLoadingId(null); } }; const handleDeleteAgency = async (agencyId: string) => { const confirmDelete = window.confirm('Tem certeza que deseja excluir esta agência? Esta ação não pode ser desfeita.'); if (!confirmDelete) { return; } setDeletingId(agencyId); try { const response = await fetch(`/api/admin/agencies/${agencyId}`, { method: 'DELETE', }); if (!response.ok && response.status !== 204) { const data = await response.json().catch(() => ({ error: 'Erro ao excluir agência.' })); alert(data?.error || 'Erro ao excluir agência.'); return; } alert('Agência excluída com sucesso!'); if (selectedAgencyId === agencyId) { setSelectedAgencyId(null); setSelectedDetails(null); } await loadAgencies(); } catch (error) { console.error('Erro ao excluir agência:', error); alert('Erro ao excluir agência.'); } finally { setDeletingId(null); } }; if (loading) { return (

Carregando...

{detailsLoadingId && (
Carregando detalhes da agência selecionada...
)} {detailsError && !detailsLoadingId && (
{detailsError}
)} {selectedDetails && !detailsLoadingId && (

Detalhes da Agência

Informações enviadas no cadastro e dados administrativos

Abrir painel da agência

Dados da Agência

Nome Fantasia

{selectedDetails.tenant.name}

Razão Social

{selectedDetails.tenant.razao_social || '—'}

CNPJ

{selectedDetails.tenant.cnpj || '—'}

Segmento

{selectedDetails.tenant.industry || '—'}

Descrição

{selectedDetails.tenant.description || '—'}

Status

{selectedDetails.tenant.is_active ? 'Ativa' : 'Inativa'}

Endereço e Contato

Endereço completo

{selectedDetails.tenant.address || '—'}

Cidade / Estado

{selectedDetails.tenant.city || '—'} {selectedDetails.tenant.state ? `- ${selectedDetails.tenant.state}` : ''}

CEP

{selectedDetails.tenant.zip || '—'}

Website

{selectedDetails.tenant.website ? ( {selectedDetails.tenant.website} ) : (

)}

E-mail comercial

{selectedDetails.tenant.email || '—'}

Telefone

{selectedDetails.tenant.phone || '—'}

Administrador da Agência

{selectedDetails.admin ? (

Nome

{selectedDetails.admin.name}

E-mail

{selectedDetails.admin.email}

Perfil

{selectedDetails.admin.role}

Criado em

{new Date(selectedDetails.admin.created_at).toLocaleString('pt-BR')}

) : (

Nenhum administrador associado encontrado.

)}
Última atualização: {new Date(selectedDetails.tenant.updated_at).toLocaleString('pt-BR')}
)}
); } return (
{/* Header */}
A

Aggios

Painel Administrativo

Admin AGGIOS

{userData?.email}

{/* Main Content */}
{/* Stats Grid */}

Total de Agências

{agencies.length}

Agências Ativas

{agencies.filter(a => a.is_active).length}

Agências Inativas

{agencies.filter(a => !a.is_active).length}

{/* Agencies Table */}

Agências Cadastradas

{loadingAgencies ? (

Carregando agências...

) : agencies.length === 0 ? (

Nenhuma agência cadastrada ainda.

) : (
{agencies.map((agency) => ( ))}
Agência Subdomínio Domínio Status Data de Criação Ações
{agency.name.charAt(0).toUpperCase()}
{agency.name}
{agency.subdomain}
{agency.domain || '-'}
{agency.is_active ? 'Ativa' : 'Inativa'} {new Date(agency.created_at).toLocaleDateString('pt-BR')}
)}
); }