import { useNavigate } from 'react-router-dom'; import { ArrowLeft, Glasses, Box, Ruler, FileText, Columns2, Download } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { useModelStore } from '@/stores/useModelStore'; import { ModelViewerCanvas } from '@/components/three/ModelViewer'; import { ViewerControls } from '@/components/ViewerControls'; import { InspectionChecklist } from '@/components/InspectionChecklist'; import { FineTuningControls } from '@/components/FineTuningControls'; import { MeasurementsList } from '@/components/MeasurementsList'; import { ScreenshotGallery } from '@/components/ScreenshotGallery'; import { ComparePanel } from '@/components/ComparePanel'; import { useEffect, useCallback } from 'react'; import { toast } from 'sonner'; import { ScrollArea } from '@/components/ui/scroll-area'; import { Separator } from '@/components/ui/separator'; import { generateInspectionReport } from '@/lib/generateReport'; const Viewer = () => { const navigate = useNavigate(); const { model, xrSupported, compareMode, setCompareMode, checklist, measurements, screenshots, fineTuning } = useModelStore(); const handleExportPDF = useCallback(async () => { if (!model) return; toast.info('Gerando relatório PDF…'); try { await generateInspectionReport({ fileName: model.fileName, fileSize: model.fileSize, fineTuning, checklist, measurements, screenshots, }); toast.success('Relatório exportado com sucesso!'); } catch (err) { console.error(err); toast.error('Erro ao gerar o relatório.'); } }, [model, fineTuning, checklist, measurements, screenshots]); useEffect(() => { if (!model) { navigate('/'); } }, [model, navigate]); if (!model) return null; const handleEnterXR = async () => { if (!xrSupported) { toast.error('WebXR não é suportado neste navegador. Use o navegador do Meta Quest 3.'); return; } navigate('/xr'); }; return (
{/* Top bar */}

TrackkSteelXR

{/* 3D Canvas with floating controls */}
{/* Compare panel */} {compareMode && (
)} {/* Side panel */}
); }; function InfoItem({ icon: Icon, label, value }: { icon: any; label: string; value: string }) { return (

{label}

{value}

); } export default Viewer;