import { create } from 'zustand';
import { prafrotService } from '../services/prafrotService';
import { useFeedbackStore } from '../components/FeedbackNotification';
import { extractFriendlyMessage } from '../utils/errorMessages';

const notify = (type, title, message) => useFeedbackStore.getState().notify(type, title, message);

export const useVehicles = create((set, get) => ({
  vehicles: [],
  loading: false,
  error: null,

  fetchVehicles: async () => {
    set({ loading: true, error: null });
    try {
      const data = await prafrotService.getVehicles();
      // Ensure data is an array
      set({ vehicles: Array.isArray(data) ? data : (data.data || []) });
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      set({ error: friendlyMsg });
      notify('error', 'Falha na Busca', friendlyMsg);
    } finally {
      set({ loading: false });
    }
  },

  createVehicle: async (vehicleData) => {
    set({ loading: true });
    try {
      await prafrotService.createVehicle(vehicleData);
      notify('success', 'Cadastro Concluído', 'Veículo registrado com sucesso no sistema.');
      get().fetchVehicles(); // Refresh list
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      notify('error', 'Falha no Cadastro', friendlyMsg);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  updateVehicle: async (id, vehicleData) => {
    set({ loading: true });
    try {
      await prafrotService.updateVehicle(id, vehicleData);
      notify('success', 'Atualização!', 'Os dados do veículo foram atualizados.');
      get().fetchVehicles();
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      notify('error', 'Erro na Atualização', friendlyMsg);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  updateVehicleStatus: async (id, statusFrota) => {
    try {
      await prafrotService.updateVehicleStatus(id, statusFrota);
      notify('success', 'Status Alterado', 'O status do veículo foi modificado com sucesso.');
      get().fetchVehicles(); 
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      notify('error', 'Erro de Status', friendlyMsg);
      return false;
    }
  },
  
  deleteVehicle: async (id) => {
    if (!window.confirm('Tem certeza que deseja excluir este veículo?')) return;
    set({ loading: true });
    try {
      await prafrotService.deleteVehicle(id);
      notify('success', 'Registro Removido', 'O veículo foi removido permanentemente.');
      get().fetchVehicles();
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      notify('error', 'Erro na Remoção', friendlyMsg);
      return false;
    } finally {
      set({ loading: false });
    }
  }
}));



