// hooks/useCamera.ts
import { useState, useCallback } from 'react';

export function useCamera(onCaptureSuccess: (files: FileList | null) => void) {
  const [isCameraOpen, setIsCameraOpen] = useState(false);
  const [stream, setStream] = useState<MediaStream | null>(null);

  const openCamera = async () => {
    if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
      alert("Tu navegador no soporta el acceso a la cámara.");
      return;
    }
    try {
      const mediaStream = await navigator.mediaDevices.getUserMedia({
        video: { 
          facingMode: 'environment',
          width: { ideal: 1920 },
          height: { ideal: 1080 }
        },
      });
      setStream(mediaStream);
      setIsCameraOpen(true);
    } catch (err) {
      console.error("Error al acceder a la cámara: ", err);
      alert("No se pudo acceder a la cámara. Asegúrate de haber otorgado los permisos necesarios.");
    }
  };

  const closeCamera = useCallback(() => {
    if (stream) {
      stream.getTracks().forEach(track => track.stop());
    }
    setStream(null);
    setIsCameraOpen(false);
  }, [stream]);

  const takePicture = useCallback((blob: Blob) => {
    const file = new File([blob], `capture-${Date.now()}.jpg`, { type: 'image/jpeg' });
    
    // Crear FileList simulado para compatibilidad
    const dataTransfer = new DataTransfer();
    dataTransfer.items.add(file);
    
    onCaptureSuccess(dataTransfer.files);
    closeCamera();
  }, [onCaptureSuccess, closeCamera]);

  return { isCameraOpen, stream, openCamera, closeCamera, takePicture };
}