import { create } from 'zustand';
import { fleetService } from '../services/fleetService';
import { toast } from 'sonner';

export const useVehicles = create((set, get) => ({
  vehicles: [],
  availability: [], // Store availability data
  statusList: [], // Store status data
  loading: false,
  error: null,

  fetchVehicles: async () => {
    set({ loading: true, error: null });
    try {
      const data = await fleetService.getVehicles();
      // Ensure data is an array, handle different API return structures if needed
      set({ vehicles: Array.isArray(data) ? data : (data.data || []) });
    } catch (error) {
      set({ error: error.message });
      toast.error('Erro ao carregar veículos: ' + error.message);
    } finally {
      set({ loading: false });
    }
  },

  createVehicle: async (vehicleData) => {
    set({ loading: true });
    try {
      await fleetService.createVehicle(vehicleData);
      toast.success('Veículo cadastrado com sucesso!');
      get().fetchVehicles(); // Refresh list
      return true;
    } catch (error) {
      toast.error('Erro ao cadastrar veículo: ' + error.message);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  updateVehicle: async (id, vehicleData) => {
    set({ loading: true });
    try {
      await fleetService.updateVehicle(id, vehicleData);
      toast.success('Veículo atualizado com sucesso!');
      get().fetchVehicles();
      return true;
    } catch (error) {
      toast.error('Erro ao atualizar veículo: ' + error.message);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  // --- Disponibilidade ---

  fetchAvailability: async () => {
     try {
       const data = await fleetService.getAvailability();
       set({ availability: Array.isArray(data) ? data : (data.data || []) });
     } catch (error) {
       console.error('Erro ao buscar disponibilidade', error);
     }
  },

  createAvailability: async (data) => {
    try {
      await fleetService.createAvailability(data);
      toast.success('Disponibilidade registrada!');
      get().fetchAvailability();
    } catch (error) {
      toast.error('Erro ao registrar disponibilidade: ' + error.message);
    }
  },

  updateAvailability: async (id, data) => {
    try {
      await fleetService.updateAvailability(id, data);
      toast.success('Disponibilidade atualizada!');
      get().fetchAvailability();
    } catch (error) {
      toast.error('Erro ao atualizar disponibilidade: ' + error.message);
    }
  },

  // --- Status ---

  fetchStatus: async () => {
    try {
      const data = await fleetService.getStatus();
      set({ statusList: Array.isArray(data) ? data : (data.data || []) });
    } catch (error) {
      console.error('Erro ao buscar status', error);
    }
  },

  updateStatus: async (id, data) => {
    try {
      await fleetService.updateStatus(id, data);
      toast.success('Status atualizado!');
      get().fetchStatus(); 
    } catch (error) {
      toast.error('Erro ao atualizar status: ' + error.message);
    }
  }

}));
