import React from 'react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { useDashboardProducaoOtimizado } from '@/hooks/useDashboardProducaoOtimizado'; import { useProcessChartData } from '@/hooks/useProcessChartData'; import { ProcessChartOptimized } from './ProcessChartOptimized'; interface OFData { num_of: string; descritivo?: string; peso_total?: number; data_prazo?: string; } interface OFCardOptimizedProps { ofData: OFData; } export const OFCardOptimized: React.FC = ({ ofData }) => { const { dashboardData, loading } = useDashboardProducaoOtimizado(ofData.num_of); const { chartData, loading: chartLoading } = useProcessChartData(ofData.num_of); if (loading) { return (

Carregando dados...

); } if (!dashboardData) { return (

Dados não disponíveis

); } const getStatusInfo = () => { const progressoReal = dashboardData.progressoGeral; let diasRestantes = null; if (ofData.data_prazo) { const hoje = new Date(); const prazo = new Date(ofData.data_prazo); const diffTime = prazo.getTime() - hoje.getTime(); diasRestantes = Math.ceil(diffTime / (1000 * 60 * 60 * 24)); } if (progressoReal >= 95) { return { status: 'Concluído', variant: 'default' as const, color: 'bg-green-500', borderColor: 'border-green-500' }; } else if (diasRestantes !== null && diasRestantes < 0) { return { status: 'Atrasado', variant: 'destructive' as const, color: 'bg-red-500', borderColor: 'border-red-500' }; } else if (progressoReal > 80) { return { status: 'Adiantado', variant: 'secondary' as const, color: 'bg-blue-500', borderColor: 'border-blue-500' }; } else if (diasRestantes !== null && diasRestantes <= 7) { return { status: 'Muito Atrasado', variant: 'destructive' as const, color: 'bg-orange-500', borderColor: 'border-orange-500' }; } else { return { status: 'No Prazo', variant: 'outline' as const, color: 'bg-green-500', borderColor: 'border-green-500' }; } }; const getCardBorderColor = () => { const processoConcluido = dashboardData.processos.find(p => p.nome.toLowerCase().includes('concluído') || p.nome.toLowerCase().includes('concluido') ); if (!processoConcluido) return 'border-gray-500'; switch (processoConcluido.status) { case 'verde': return 'border-green-500'; case 'amarelo': return 'border-yellow-500'; case 'vermelho': return 'border-red-500'; case 'azul': return 'border-blue-500'; default: return 'border-gray-500'; } }; const getProcessStatusColor = (status: string) => { switch (status) { case 'verde': return '#10b981'; case 'amarelo': return '#f59e0b'; case 'vermelho': return '#ef4444'; case 'azul': return '#3b82f6'; default: return '#6b7280'; } }; // Função para abreviar nomes de processos const abreviarNomeProcesso = (nome: string) => { return nome .replace(/Detalhamento/gi, 'Detalham') .replace(/Pintura\/Galv/gi, 'Pint/Galv'); }; const statusInfo = getStatusInfo(); const progressoReal = dashboardData.progressoGeral; const pesoFabricado = (dashboardData.pesoTotalFabricado).toFixed(0); const pesoTotal = (dashboardData.tonelagem).toFixed(0); const cardBorderColor = getCardBorderColor(); // Pegar os principais processos para mostrar const processosVisiveis = dashboardData.processos .filter(p => !p.nome.toLowerCase().includes('aceite') && !p.nome.toLowerCase().includes('db') && !p.nome.toLowerCase().includes('concluído') && !p.nome.toLowerCase().includes('concluido')) .slice(0, 6); return ( {/* Header do Card - Responsivo */}

{ofData.num_of}

{pesoFabricado} Kg de {pesoTotal} Kg fabricado

{statusInfo.status}
{/* Barra de Progresso - Espaçamento reduzido */}
Progresso {progressoReal.toFixed(1)}%
{/* Resumo Comparativo dos Processos - Layout Responsivo com espaçamento reduzido */}

Resumo Comparativo dos Processos

{/* Grid responsivo: 1 coluna em mobile, 2 colunas em telas maiores */}
{processosVisiveis.map((processo) => (
{abreviarNomeProcesso(processo.nome)} {processo.progressoReal.toFixed(0)}% ({(processo.pesoFabricado).toFixed(0)} Kg)
))}
{/* Gráfico de Evolução - Responsivo com espaçamento reduzido */}

Evolução/Metas da Quinzena (Kg)

{chartLoading ? (
Carregando gráfico...
) : ( )}
); };