import { LoadingSpinner } from '@/assets/components/LoadingSpinner'; import { colors } from '@/assets/styles/colors'; import { downloadDocumento, getLocalDocumentUri } from '@/assets/services/documentSync'; import { Documento } from '@/assets/types'; import styles from '@/styles/screens/reserva/detail.styles'; import { FontAwesome } from '@expo/vector-icons'; import CircleCheckIcon from '@/assets/icons/circle-check-solid.svg'; import * as Sharing from 'expo-sharing'; import { useEffect, useState } from 'react'; import { Alert, Pressable, Text, View } from 'react-native'; type Props = { documento: Documento; isLast: boolean; }; const getDocumentExt = (path: string) => { const ext = path.split('.').pop()?.toUpperCase() ?? 'DOC'; return ext.length > 4 ? 'DOC' : ext; }; export function DocumentoRow({ documento, isLast }: Props) { const [isDownloading, setIsDownloading] = useState(false); const [isDownloaded, setIsDownloaded] = useState(false); useEffect(() => { if (!documento.idDocumento || !documento.caminhoFicheiro) return; getLocalDocumentUri(documento.idDocumento, documento.caminhoFicheiro).then((uri) => { setIsDownloaded(!!uri); }); }, [documento.idDocumento, documento.caminhoFicheiro]); const fileName = documento.nome || documento.caminhoFicheiro.split('/').pop() || '---'; const openLocalFile = async (uri: string) => { const canShare = await Sharing.isAvailableAsync(); if (canShare) { await Sharing.shareAsync(uri, { UTI: '.pdf', mimeType: 'application/pdf' }); } else { Alert.alert('Erro', 'Não é possível abrir este ficheiro neste dispositivo.'); } }; const handlePress = async () => { if (!documento.idDocumento || !documento.caminhoFicheiro) return; setIsDownloading(true); try { const localUri = await getLocalDocumentUri(documento.idDocumento, documento.caminhoFicheiro); if (localUri) { await openLocalFile(localUri); return; } // Ficheiro não está local — fazer download agora const uri = await downloadDocumento({ idDocumento: documento.idDocumento, caminhoFicheiro: documento.caminhoFicheiro, checksum: documento.checksum ?? '', nome: documento.nome, }); if (uri) { setIsDownloaded(true); await openLocalFile(uri); } else { Alert.alert('Erro', 'Não foi possível descarregar o documento. Verifica a tua ligação à internet.'); } } finally { setIsDownloading(false); } }; return ( {getDocumentExt(documento.caminhoFicheiro)} {fileName} {isDownloading ? ( ) : isDownloaded ? ( ) : ( )} ); }