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

export const useMaintenance = create((set, get) => ({
  maintenances: [],
  workshops: [],
  loading: false,
  error: null,

  fetchMaintenances: async () => {
    set({ loading: true, error: null });
    try {
      const data = await maintenanceService.getMaintenances();
      set({ maintenances: Array.isArray(data) ? data : (data.data || []) });
    } catch (error) {
      set({ error: error.message });
      toast.error('Erro ao carregar manutenções: ' + error.message);
    } finally {
      set({ loading: false });
    }
  },

  createMaintenance: async (data) => {
    set({ loading: true });
    try {
      await maintenanceService.createMaintenance(data);
      toast.success('Manutenção lançada com sucesso!');
      get().fetchMaintenances();
      return true;
    } catch (error) {
      toast.error('Erro ao lançar manutenção: ' + error.message);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  updateMaintenance: async (id, data) => {
    set({ loading: true });
    try {
      await maintenanceService.updateMaintenance(id, data);
      toast.success('Manutenção atualizada com sucesso!');
      get().fetchMaintenances();
      return true;
    } catch (error) {
      toast.error('Erro ao atualizar manutenção: ' + error.message);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  // --- Oficinas ---

  fetchWorkshops: async () => {
    try {
      const data = await maintenanceService.getWorkshops();
      set({ workshops: Array.isArray(data) ? data : (data.data || []) });
    } catch (error) {
      console.error('Erro ao carregar oficinas: ' + error.message);
    }
  },

  createWorkshop: async (data) => {
    try {
      await maintenanceService.createWorkshop(data);
      toast.success('Oficina cadastrada!');
      get().fetchWorkshops();
      return true;
    } catch (error) {
      toast.error('Erro ao cadastrar oficina: ' + error.message);
      return false;
    }
  },

  updateWorkshop: async (id, data) => {
    try {
      await maintenanceService.updateWorkshop(id, data);
      toast.success('Oficina atualizada!');
      get().fetchWorkshops();
      return true;
    } catch (error) {
      toast.error('Erro ao atualizar oficina: ' + error.message);
      return false;
    }
  }
}));
