import { useState, useCallback } from 'react'; import { pontoService } from '../services/pontoService'; /** * Hook customizado para o módulo de Ponto Eletrônico. * Encapsula geolocalização e tratamentos de erro null-safe. */ export const usePonto = () => { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [location, setLocation] = useState(null); /** * Obtém a localização atual do dispositivo. */ const getGeoLocation = useCallback(() => { return new Promise((resolve, reject) => { if (!navigator.geolocation) { reject(new Error('Geolocalização não suportada no navegador.')); return; } navigator.geolocation.getCurrentPosition( (position) => { const coords = { lat: position.coords.latitude, lng: position.coords.longitude }; setLocation(coords); resolve(coords); }, (err) => { reject(new Error('Falha ao obter localização. Verifique as permissões.')); } ); }); }, []); /** * Executa a batida de ponto. */ const baterPonto = async (tipo) => { setLoading(true); setError(null); try { const coords = await getGeoLocation().catch(() => null); // Null-safe const result = await pontoService.registrarPonto({ tipo, location: coords, device: navigator.userAgent }); return result; } catch (err) { setError(err.message); return { success: false, error: err.message }; } finally { setLoading(false); } }; return { baterPonto, loading, error, location, getGeoLocation }; };