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 { ProcessChart } from './ProcessChart'; interface OFData { num_of: string; descritivo?: string; peso_total?: number; data_prazo?: string; } interface OFCardProps { ofData: OFData; } export const OFCard: 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; // Calcular dias restantes se houver data de prazo 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)); } // Determinar status baseado no progresso e prazo 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' }; } }; // Função para obter a cor da borda baseada no status do processo "Concluído" 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'; // Verde - Adiantado/No Prazo case 'amarelo': return '#f59e0b'; // Amarelo - Atenção case 'vermelho': return '#ef4444'; // Vermelho - Atrasado case 'azul': return '#3b82f6'; // Azul - No Prazo/Atenção default: return '#6b7280'; // Cinza - Padrão } }; const getProcessBorderColor = (processName: string) => { const processo = dashboardData.processos.find(p => p.nome.toLowerCase().includes(processName.toLowerCase()) ); if (!processo) return 'border-gray-500'; switch (processo.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 statusInfo = getStatusInfo(); const progressoReal = dashboardData.progressoGeral; const pesoFabricado = (dashboardData.pesoTotalFabricado / 1000).toFixed(1); const pesoTotal = (dashboardData.tonelagem / 1000).toFixed(1); const cardBorderColor = getCardBorderColor(); // Pegar os principais processos para mostrar (incluindo Montagem - 6 processos) 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); // Mostrar 6 processos console.log('Dados dos gráficos no OFCard:', chartData); console.log('Loading dos gráficos:', chartLoading); return ( {/* Header do Card - Mais compactado */}

{ofData.num_of}

{statusInfo.status}
{progressoReal.toFixed(1)}% {pesoFabricado}t de {pesoTotal}t fabricado
{/* Resumo dos Processos - Layout Grid 2x3 mais compacto */}

Resumo Comparativo dos Processos

{/* Grid 2x3 para os processos - mais compacto */}
{processosVisiveis.map((processo) => (
{processo.nome} {processo.progressoReal.toFixed(0)}%
{/* Barra Planejado */}
Plan
{/* Barra Real */}
Real
))}
{/* Título dos Gráficos */}

Gráfico de evolução/metas da quinzena

{/* Gráficos nos Retângulos com Bordas Coloridas */}
{/* Retângulo Corte - Borda vermelha */}
{chartLoading ? (
Carregando...
) : ( )}
{/* Retângulo Solda - Borda azul */}
{chartLoading ? (
Carregando...
) : ( )}
{/* Retângulo Montagem - Borda rosa */}
{chartLoading ? (
Carregando...
) : ( )}
); };