import { useState, useCallback } from 'react'; import { Models } from 'appwrite'; import { faturaService } from '@/services/faturaService'; export interface FaturaFormData { nome: string; } export interface UseFaturasReturn { faturas: Models.Document[]; loading: boolean; error: string | null; totalFaturas: number; currentPage: number; listarFaturas: (page?: number) => Promise; buscarFaturas: (nome: string, page?: number) => Promise; cadastrarFatura: (data: FaturaFormData) => Promise; atualizarFatura: (id: string, data: FaturaFormData) => Promise; deletarFatura: (id: string) => Promise; setCurrentPage: (page: number) => void; } const PAGE_SIZE = 10; export const useFaturas = (): UseFaturasReturn => { const [faturas, setFaturas] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [totalFaturas, setTotalFaturas] = useState(0); const [currentPage, setCurrentPage] = useState(1); // Listagem usando SDK do Appwrite const listarFaturas = useCallback(async (page = currentPage) => { setLoading(true); setError(null); try { const response = await faturaService.listar(page, PAGE_SIZE); if (response.success) { setFaturas(response.documents || []); setTotalFaturas(response.total || 0); setCurrentPage(page); } else { setError(response.error || 'Erro ao carregar faturas'); } } catch (err) { setError('Erro de conexão ao carregar faturas'); } finally { setLoading(false); } }, [currentPage]); const buscarFaturas = useCallback( async (nome: string, page = 1) => { setLoading(true); setError(null); try { const response = await faturaService.buscarPorNome( nome, page, PAGE_SIZE ); if (response.success) { setFaturas(response.documents || []); setTotalFaturas(response.total || 0); setCurrentPage(page); } else { setError(response.error || 'Erro ao buscar faturas'); } } catch (err) { setError('Erro de conexão ao buscar faturas'); } finally { setLoading(false); } }, [] ); // Operações de criação, atualização e exclusão continuam usando API REST const cadastrarFatura = useCallback(async (formData: FaturaFormData): Promise => { setLoading(true); setError(null); try { const response = await faturaService.criar(formData); if (response.success) { await listarFaturas(currentPage); return true; } else { setError(response.error || 'Erro ao cadastrar fatura'); return false; } } catch (err) { setError('Erro de conexão ao cadastrar fatura'); return false; } finally { setLoading(false); } }, [currentPage, listarFaturas]); const atualizarFatura = useCallback(async (id: string, formData: FaturaFormData): Promise => { setLoading(true); setError(null); try { const response = await faturaService.atualizar(id, formData); if (response.success) { await listarFaturas(currentPage); return true; } else { setError(response.error || 'Erro ao atualizar fatura'); return false; } } catch (err) { setError('Erro de conexão ao atualizar fatura'); return false; } finally { setLoading(false); } }, [currentPage, listarFaturas]); const deletarFatura = useCallback(async (id: string): Promise => { setLoading(true); setError(null); try { const response = await faturaService.deletar(id); if (response.success) { await listarFaturas(currentPage); return true; } else { setError(response.error || 'Erro ao deletar fatura'); return false; } } catch (err) { setError('Erro de conexão ao deletar fatura'); return false; } finally { setLoading(false); } }, [currentPage, listarFaturas]); return { faturas, loading, error, totalFaturas, currentPage, listarFaturas, buscarFaturas, cadastrarFatura, atualizarFatura, deletarFatura, setCurrentPage, }; };