import { useState } from 'react'; import { View, Text, TouchableOpacity, ScrollView, Alert, Image, ActivityIndicator } from 'react-native'; import { useLocalSearchParams, router } from 'expo-router'; import * as ImagePicker from 'expo-image-picker'; import * as Location from 'expo-location'; import { api } from '../../../services/api'; export default function InstallationConfirmScreen() { const { id } = useLocalSearchParams<{ id: string }>(); const [photo, setPhoto] = useState(null); const [coords, setCoords] = useState<{ lat: number; lng: number } | null>(null); const [loading, setLoading] = useState(false); const [gpsLoading, setGpsLoading] = useState(false); const capturePhoto = async () => { const { status } = await ImagePicker.requestCameraPermissionsAsync(); if (status !== 'granted') return Alert.alert('Permission denied', 'Camera access is required.'); const result = await ImagePicker.launchCameraAsync({ quality: 0.7, base64: false }); if (!result.canceled) setPhoto(result.assets[0].uri); }; const captureGPS = async () => { setGpsLoading(true); try { const { status } = await Location.requestForegroundPermissionsAsync(); if (status !== 'granted') { Alert.alert('Permission denied', 'Location access is required.'); return; } const loc = await Location.getCurrentPositionAsync({ accuracy: Location.Accuracy.High }); setCoords({ lat: loc.coords.latitude, lng: loc.coords.longitude }); } catch { Alert.alert('Error', 'Could not get location.'); } finally { setGpsLoading(false); } }; const confirm = async () => { if (!coords) return Alert.alert('Required', 'Capture GPS location first.'); setLoading(true); try { await api.patch(`/api/v1/tickets/${id}/confirm-installation`, { latitude: coords.lat, longitude: coords.lng, photoUrl: photo, }); Alert.alert('Done!', 'Installation confirmed.', [{ text: 'OK', onPress: () => router.back() }]); } catch (e: any) { Alert.alert('Error', e?.response?.data?.message ?? 'Confirmation failed.'); } finally { setLoading(false); } }; return ( router.back()} className="mr-3"> Installation Confirmation 📍 GPS Location {coords ? ( ✓ {coords.lat.toFixed(6)}, {coords.lng.toFixed(6)} ) : ( No location captured yet )} {gpsLoading ? : Capture GPS} 📷 Photo Proof {photo && } {photo ? 'Retake Photo' : 'Take Photo'} {loading ? : ✓ Confirm Installation} ); }