import { useState, useCallback } from 'react';
import { rhService } from '../services/rhService';
import { toast } from 'sonner';

/**
 * Hook customizado para gerenciar recisões trabalhistas
 */
export const useRecisao = () => {
  const [recisoes, setRecisoes] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);

  /**
   * Salvar recisão no banco
   */
  const salvarRecisao = useCallback(async (payload) => {
    setLoading(true);
    setError(null);
    try {
      const response = await rhService.salvarRecisao(payload);
      toast.success(response?.message || 'Recisão salva com sucesso!');
      return response;
    } catch (err) {
      const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao salvar recisão';
      setError(errorMessage);
      toast.error(errorMessage);
      throw err;
    } finally {
      setLoading(false);
    }
  }, []);

  /**
   * Buscar recisões por colaborador
   */
  const fetchRecisoesByColaborador = useCallback(async (idcolaborador) => {
    setLoading(true);
    setError(null);
    try {
      const response = await rhService.getRecisoesByColaborador(idcolaborador);
      const recisoesList = response?.recisoes || response?.data || [];
      setRecisoes(recisoesList);
      return response;
    } catch (err) {
      const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao buscar recisões';
      setError(errorMessage);
      toast.error(errorMessage);
      return null;
    } finally {
      setLoading(false);
    }
  }, []);

  /**
   * Listar todas as recisões
   */
  const fetchAllRecisoes = useCallback(async (params = {}) => {
    setLoading(true);
    setError(null);
    try {
      const response = await rhService.getAllRecisoes(params);
      const recisoesList = response?.recisoes || response?.data || [];
      setRecisoes(recisoesList);
      return response;
    } catch (err) {
      const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao listar recisões';
      setError(errorMessage);
      toast.error(errorMessage);
      return null;
    } finally {
      setLoading(false);
    }
  }, []);

  return {
    recisoes,
    loading,
    error,
    salvarRecisao,
    fetchRecisoesByColaborador,
    fetchAllRecisoes
  };
};
