import React from 'react';
import { useFleetData } from '../hooks/useFleetData';
import {
Truck,
Wrench,
Fuel,
MapPin,
AlertCircle,
ClipboardCheck,
Store,
Navigation,
ArrowUpRight,
TrendingUp
} from 'lucide-react';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent } from '@/components/ui/card';
import { cn } from '@/lib/utils';
import { motion } from 'framer-motion';
import { StatsGrid, DataTable } from '@/components/shared';
import { TableRow, TableCell } from '@/components/ui/table';
const TABLE_COLUMNS = ['Placa', 'Modelo', 'Status', 'Localização / Base', 'Motorista Responsável'];
/**
* StatCard - Componente local para replicar o design de "Icon Box" do mockup
*/
const StatCard = ({ label, value, icon, colorClass, statusDesc }) => (
{label}
{value}
{statusDesc &&
{statusDesc}
}
{React.cloneElement(icon, { size: 28, strokeWidth: 2.5 })}
);
/**
* Visão Geral (Dashboard) do ambiente Fleet V2.
* Replica o layout de grids e cards do mockup.
*/
export const DashboardView = () => {
const { veiculos, stats } = useFleetData();
const primaryStats = React.useMemo(() => [
{ label: 'Frota Total', value: stats.total, icon: , color: 'bg-primary/10 text-primary' },
{ label: 'Em Operação', value: stats.operacao, icon: , color: 'bg-emerald-100 text-emerald-600' },
{ label: 'Em Manutenção', value: stats.manutencao, icon: , color: 'bg-rose-100 text-rose-600' },
{ label: 'Abastecimentos (Mês)', value: stats.abastecimentosMes, icon: , color: 'bg-amber-100 text-amber-600' },
], [stats]);
const secondaryStats = React.useMemo(() => [
{ label: 'Checklists Realizados', value: stats.checklists, icon: , color: 'bg-teal-100 text-teal-600' },
{ label: 'Alertas Monitoramento', value: stats.alertas, icon: , color: 'bg-primary/10 text-primary' },
{ label: 'SLA MÁXIMO', value: '4.8h', icon: , color: 'bg-emerald-500 text-white', statusDesc: 'Meta de Performance' },
], [stats]);
const renderVehicleRow = (v) => (
{v.modelo}
{v.status === 'operacao' ? 'Em Operação' : v.status === 'manutencao' ? 'Manutenção' : 'Parado'}
{v.base}
{v.motorista.substring(0, 2).toUpperCase()}
{v.motorista}
);
return (
{/* Linha 1: Frota Macro (4 cards) */}
{primaryStats.map((stat, i) => (
))}
{/* Linha 2: Monitoramento e Qualidade (3 cards) */}
{secondaryStats.map((stat, i) => (
))}
{/* Tabela de Resumo */}
Resumo da Frota
Status em Tempo Real
);
};
export default DashboardView;