import { create } from 'zustand';
import { dashboardFleetService } from '../services/dashboardFleetService';

export const useFleetDashboard = create((set) => ({
  metrics: {
    totalPlacas: null,
    placasPorBase: null,
    placasPorAno: null,
    placasPorCategoria: null, // Novo
    placasPorModelo: null, // Novo
    placasPorTipo: null, // Novo
    placasPorStatus: null,
    placasPorManutencao: null,
    placasPorProprietario: null, // Novo
    disponibilidade: null,
    monitoramentoPorUnidade: null,
    sinistrosPorStatus: null,
    manutencaoPorStatus: null
  },
  loading: false,
  error: null,

  fetchAllMetrics: async () => {
    set({ loading: true, error: null });
    try {
      // Executa todas as promises em paralelo para carregar o dashboard
      const [
        totalPlacas,
        placasPorBase,
        placasPorAno,
        placasPorCategoria,
        placasPorModelo,
        placasPorTipo,
        placasPorStatus,
        placasPorManutencao,
        placasPorProprietario,
        disponibilidade,
        monitoramentoPorUnidade,
        sinistrosPorStatus,
        manutencaoPorStatus
      ] = await Promise.all([
        dashboardFleetService.getTotalPlacas().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorBase().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorAno().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorCategoria().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorModelo().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorTipo().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorStatus().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorManutencao().catch(err => ({ error: err.message })),
        dashboardFleetService.getPlacasPorProprietario().catch(err => ({ error: err.message })),
        dashboardFleetService.getDisponibilidade().catch(err => ({ error: err.message })),
        dashboardFleetService.getMonitoramentoPorUnidade().catch(err => ({ error: err.message })),
        dashboardFleetService.getSinistrosPorStatus().catch(err => ({ error: err.message })),
        dashboardFleetService.getManutencaoPorStatus().catch(err => ({ error: err.message }))
      ]);

      set({
        metrics: {
          totalPlacas,
          placasPorBase,
          placasPorAno,
          placasPorCategoria,
          placasPorModelo,
          placasPorTipo,
          placasPorStatus,
          placasPorManutencao,
          placasPorProprietario,
          disponibilidade,
          monitoramentoPorUnidade,
          sinistrosPorStatus,
          manutencaoPorStatus
        }
      });
    } catch (error) {
      console.error('Erro geral no dashboard:', error);
      set({ error: 'Falha ao carregar indicadores.' });
    } finally {
      set({ loading: false });
    }
  }
}));
