import { useState, useCallback } from 'react'; import { usuarioApiService, UsuarioBff, UsuariosBffParams } from '@/services/usuarioApiService'; export interface UseUsuariosApiReturn { usuarios: UsuarioBff[]; loading: boolean; error: string | null; totalUsuarios: number; currentPage: number; totalPages: number; listarUsuarios: (params?: UsuariosBffParams) => Promise; buscarUsuarioPorId: (id: string) => Promise; atualizarUsuario: (id: string, data: Partial) => Promise; setCurrentPage: (page: number) => void; limparErro: () => void; } const DEFAULT_PAGE_SIZE = 20; export const useUsuariosApi = (): UseUsuariosApiReturn => { const [usuarios, setUsuarios] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [totalUsuarios, setTotalUsuarios] = useState(0); const [currentPage, setCurrentPage] = useState(1); const [totalPages, setTotalPages] = useState(0); const listarUsuarios = useCallback(async (params: UsuariosBffParams = {}) => { setLoading(true); setError(null); try { // Usar parâmetros fornecidos ou valores padrão const requestParams = { page: params.page || currentPage, limit: params.limit || DEFAULT_PAGE_SIZE, search: params.search, }; const response = await usuarioApiService.listar(requestParams); setUsuarios(response.items); setTotalUsuarios(response.total); setCurrentPage(response.page); setTotalPages(Math.ceil(response.total / response.limit)); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Erro desconhecido ao carregar usuários'; setError(errorMessage); console.error('❌ Erro no hook useUsuariosApi:', err); // Limpar dados em caso de erro setUsuarios([]); setTotalUsuarios(0); setTotalPages(0); } finally { setLoading(false); } }, [currentPage]); const buscarUsuarioPorId = useCallback(async (id: string): Promise => { try { setError(null); return await usuarioApiService.buscarPorId(id); } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Erro desconhecido ao buscar usuário'; setError(errorMessage); console.error('❌ Erro ao buscar usuário por ID:', err); return null; } }, []); const atualizarUsuario = useCallback(async (id: string, data: Partial): Promise => { try { setError(null); const usuarioAtualizado = await usuarioApiService.atualizar(id, data); // Atualizar o usuário na lista local setUsuarios(prevUsuarios => prevUsuarios.map(usuario => usuario.id === id ? usuarioAtualizado : usuario ) ); return usuarioAtualizado; } catch (err) { const errorMessage = err instanceof Error ? err.message : 'Erro desconhecido ao atualizar usuário'; setError(errorMessage); console.error('❌ Erro ao atualizar usuário:', err); return null; } }, []); const handleSetCurrentPage = useCallback((page: number) => { setCurrentPage(page); }, []); const limparErro = useCallback(() => { setError(null); }, []); return { usuarios, loading, error, totalUsuarios, currentPage, totalPages, listarUsuarios, buscarUsuarioPorId, atualizarUsuario, setCurrentPage: handleSetCurrentPage, limparErro, }; };