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
  };
};
