import { useState, useEffect } from 'react'; import { Bar, Pie, Line } from 'react-chartjs-2'; import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, ArcElement, PointElement, LineElement } from 'chart.js'; import { FiBarChart2, FiPieChart, FiTrendingUp, FiUsers, FiAlertTriangle } from 'react-icons/fi'; ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend, ArcElement, PointElement, LineElement); export default function Dashboard({ results }) { const [activeTab, setActiveTab] = useState('overview'); const [chartData, setChartData] = useState(null); useEffect(() => { if (results && results.length > 0) { const statusCounts = results.reduce((acc, agent) => { acc[agent.status] = (acc[agent.status] || 0) + 1; return acc; }, {}); const positionCounts = results.reduce((acc, agent) => { acc[agent.position] = (acc[agent.position] || 0) + 1; return acc; }, {}); setChartData({ status: { labels: Object.keys(statusCounts), datasets: [{ label: 'Status dos Agentes', data: Object.values(statusCounts), backgroundColor: [ 'rgba(16, 185, 129, 0.7)', 'rgba(239, 68, 68, 0.7)', 'rgba(245, 158, 11, 0.7)' ], borderColor: [ 'rgba(16, 185, 129, 1)', 'rgba(239, 68, 68, 1)', 'rgba(245, 158, 11, 1)' ], borderWidth: 1 }] }, positions: { labels: Object.keys(positionCounts), datasets: [{ label: 'Cargos', data: Object.values(positionCounts), backgroundColor: 'rgba(59, 130, 246, 0.7)', borderColor: 'rgba(59, 130, 246, 1)', borderWidth: 1 }] }, timeline: { labels: results.map((_, i) => `Agente ${i+1}`), datasets: [{ label: 'Análise de Risco', data: results.map(agent => agent.riskScore || Math.random() * 100), borderColor: 'rgba(239, 68, 68, 1)', backgroundColor: 'rgba(239, 68, 68, 0.1)', tension: 0.4, fill: true }] } }); } }, [results]); if (!results || results.length === 0) { return (

Nenhum dado disponível para exibir no dashboard

); } return (

Total de Agentes

{results.length}

Ativos

{results.filter(r => r.status === 'ativo').length}

Inativos

{results.filter(r => r.status === 'inativo').length}

{activeTab === 'overview' && chartData && (

Distribuição por Status

)} {activeTab === 'status' && chartData && (

Status dos Agentes

)} {activeTab === 'positions' && chartData && (

Distribuição de Cargos

)} {activeTab === 'risk' && chartData && (

Análise de Risco

)}
); }