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

/**
 * Hook para controle especializado de trabalhadores (Parceiros e Colaboradores)
 */
export const useTrabalhadores = () => {
  const [trabalhadores, setTrabalhadores] = useState([]);
  const [loading, setLoading] = useState(false);
  const [filters, setFilters] = useState({
    search: '',
    tipo: '', // 'Parceiro' ou 'Colaborador'
    cargo: '',
    base: '',
    empresa: '',
    status: ''
  });

  const fetchTrabalhadores = useCallback(async () => {
    setLoading(true);
    try {
      const response = await rhService.getTrabalhadores();
      setTrabalhadores(response || []);
    } catch (error) {
      console.error('Erro ao buscar trabalhadores:', error);
      setTrabalhadores([]);
    } finally {
      setLoading(false);
    }
  }, []);

  // Separar por tipo
  const parceiros = useMemo(() => 
    trabalhadores.filter(t => t.tipo === 'Parceiro' || t.tipo_trabalhador === 'Parceiro'),
    [trabalhadores]
  );

  const colaboradores = useMemo(() => 
    trabalhadores.filter(t => t.tipo === 'Colaborador' || t.tipo_trabalhador === 'Colaborador'),
    [trabalhadores]
  );

  // Filtrar dados baseado nos filtros aplicados
  const dadosFiltrados = useMemo(() => {
    let result = [...trabalhadores];

    if (filters.search) {
      const searchLower = filters.search.toLowerCase();
      result = result.filter(t => 
        (t.nome || '').toLowerCase().includes(searchLower) ||
        (t.cargo || '').toLowerCase().includes(searchLower) ||
        (t.cpf || '').includes(searchLower)
      );
    }

    if (filters.tipo) {
      result = result.filter(t => 
        t.tipo === filters.tipo || t.tipo_trabalhador === filters.tipo
      );
    }

    if (filters.cargo) {
      result = result.filter(t => 
        (t.cargo || '').toLowerCase().includes(filters.cargo.toLowerCase())
      );
    }

    if (filters.base) {
      result = result.filter(t => t.base === filters.base);
    }

    if (filters.empresa) {
      result = result.filter(t => t.empresa === filters.empresa);
    }

    if (filters.status) {
      result = result.filter(t => t.status === filters.status);
    }

    return result;
  }, [trabalhadores, filters]);

  const updateFilters = useCallback((newFilters) => {
    setFilters(prev => ({ ...prev, ...newFilters }));
  }, []);

  return {
    trabalhadores,
    parceiros,
    colaboradores,
    dadosFiltrados,
    loading,
    filters,
    fetchTrabalhadores,
    setFilters: updateFilters
  };
};
