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

/**
 * Hook customizado para gerenciar descontos de colaboradores
 */
export const useDescontos = () => {
  const [descontos, setDescontos] = useState([]);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState(null);

  /**
   * Criar ou atualizar descontos
   */
  const createOrUpdateDescontos = useCallback(async (payload) => {
    setLoading(true);
    setError(null);
    try {
      const response = await rhService.createOrUpdateDescontos(payload);
      const data = response?.data || response;
      toast.success(response?.message || 'Descontos salvos com sucesso!');
      return data;
    } catch (err) {
      const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao salvar descontos';
      setError(errorMessage);
      toast.error(errorMessage);
      throw err;
    } finally {
      setLoading(false);
    }
  }, []);

  /**
   * Buscar descontos por colaborador
   */
  const fetchDescontosByColaborador = useCallback(async (idcolaborador, params = {}) => {
    setLoading(true);
    setError(null);
    try {
      const response = await rhService.getDescontosByColaborador(idcolaborador, params);
      console.log('📥 Response descontos da API:', response);
      // A API retorna { data: [...], success: true } ou diretamente [...]
      const descontosList = Array.isArray(response) 
        ? response 
        : (Array.isArray(response?.data) ? response.data : (response?.descontos || []));
      console.log('📊 Descontos processados:', descontosList);
      setDescontos(descontosList);
      return response;
    } catch (err) {
      const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao buscar descontos';
      setError(errorMessage);
      toast.error(errorMessage);
      return null;
    } finally {
      setLoading(false);
    }
  }, []);

  /**
   * Listar todos os descontos
   */
  const fetchAllDescontos = useCallback(async (params = {}) => {
    setLoading(true);
    setError(null);
    try {
      const response = await rhService.getAllDescontos(params);
      const descontosList = response?.descontos || response?.data || [];
      setDescontos(descontosList);
      return response;
    } catch (err) {
      const errorMessage = err?.response?.data?.message || err?.message || 'Erro ao listar descontos';
      setError(errorMessage);
      toast.error(errorMessage);
      return null;
    } finally {
      setLoading(false);
    }
  }, []);

  return {
    descontos,
    loading,
    error,
    createOrUpdateDescontos,
    fetchDescontosByColaborador,
    fetchAllDescontos
  };
};
