import { create } from 'zustand';
import { prafrotService } from '../services/prafrotService';
import { toast } from 'sonner';
import { extractFriendlyMessage } from '../utils/errorMessages';

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

  fetchStatus: async () => {
    set({ loading: true, error: null });
    try {
      const data = await prafrotService.getStatus();
      set({ statusList: Array.isArray(data) ? data : (data.data || []) });
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      set({ error: friendlyMsg });
      toast.error(friendlyMsg);
    } finally {
      set({ loading: false });
    }
  },

  createStatus: async (payload) => {
    set({ loading: true });
    try {
      await prafrotService.createStatus(payload);
      toast.success('Status registrado com sucesso!');
      get().fetchStatus();
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      toast.error(friendlyMsg);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  updateStatus: async (id, payload) => {
    set({ loading: true });
    try {
      await prafrotService.updateStatus(id, payload);
      toast.success('Status atualizado com sucesso!');
      get().fetchStatus();
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      toast.error(friendlyMsg);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  updateStatusInline: async (id, statusFrota) => {
    // Agora utiliza o endpoint em lote mesmo para uma única atualização inline
    try {
      await prafrotService.updateStatusBatch([id], statusFrota);
      toast.success('Status atualizado!');
      get().fetchStatus();
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      toast.error(friendlyMsg);
      return false;
    }
  },

  updateStatusBatch: async (ids, statusFrota) => {
    set({ loading: true });
    try {
      await prafrotService.updateStatusBatch(ids, statusFrota);
      toast.success(`${ids.length} itens atualizados com sucesso!`);
      get().fetchStatus();
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      toast.error(friendlyMsg);
      return false;
    } finally {
      set({ loading: false });
    }
  },

  deleteStatus: async (id) => {
    if (!window.confirm('Tem certeza que deseja excluir este registro de status?')) return;
    set({ loading: true });
    try {
      await prafrotService.deleteStatus(id);
      toast.success('Status excluído com sucesso!');
      get().fetchStatus();
      return true;
    } catch (error) {
      const friendlyMsg = extractFriendlyMessage(error);
      toast.error(friendlyMsg);
      return false;
    } finally {
      set({ loading: false });
    }
  }
}));



