import { useRef, useEffect, useContext } from 'react'; import { Camera, useCameraDevice, useCameraPermission, type CameraDevice, } from 'react-native-vision-camera'; import Logger from '../utils/logger'; import { GetIDContext } from '../contexts/getid-context'; type CameraSetup = { cameraRef: React.MutableRefObject; hasPermission: boolean; device?: CameraDevice; }; type CameraSetupProps = { type: 'back' | 'front'; }; export const useCameraSetup = ({ type = 'back', }: CameraSetupProps): CameraSetup => { const cameraRef = useRef(null); const { hasPermission, requestPermission } = useCameraPermission(); const device = useCameraDevice(type, { physicalDevices: ['wide-angle-camera'], }); const context = useContext(GetIDContext); useEffect(() => { const checkPermissions = async () => { if (hasPermission) return; Logger.log('Requesting camera permission'); const acquiredPermission = await requestPermission(); if (acquiredPermission) return; Logger.error('Camera access not granted', context!.trySendEvent); }; checkPermissions(); }, [hasPermission, requestPermission, context]); return { cameraRef, hasPermission, device }; };