import * as React from 'react'; import Head from 'next/head'; import { useRouter } from 'next/router'; import { MobileHeader, QRScanner } from 'components/mobile'; interface ScanResult { type: 'plant' | 'transport' | 'unknown'; id: string; data?: any; } function parseScanResult(result: string): ScanResult { // Expected formats: // plant:{id}-{species}-{variety} // transport:{id} // Or just a raw ID if (result.startsWith('plant:')) { const parts = result.slice(6).split('-'); return { type: 'plant', id: parts[0], data: { species: parts[1], variety: parts[2], }, }; } if (result.startsWith('transport:')) { return { type: 'transport', id: result.slice(10), }; } // Assume it's a plant ID return { type: 'unknown', id: result, }; } export default function ScanPage() { const router = useRouter(); const [scanResult, setScanResult] = React.useState(null); const [isLoading, setIsLoading] = React.useState(false); const [error, setError] = React.useState(null); const handleScan = async (result: string) => { setIsLoading(true); setError(null); try { const parsed = parseScanResult(result); setScanResult(parsed); // Try to fetch the plant/transport data if (parsed.type === 'plant' || parsed.type === 'unknown') { const response = await fetch(`/api/plants/${parsed.id}`); if (response.ok) { const data = await response.json(); setScanResult({ ...parsed, type: 'plant', data }); } else if (response.status === 404) { setError('Plant not found. Would you like to register it?'); } else { setError('Failed to fetch plant data'); } } } catch (err) { setError('An error occurred while processing the scan'); } finally { setIsLoading(false); } }; const handleScanError = (err: Error) => { setError(err.message); }; const handleViewPlant = () => { if (scanResult) { router.push(`/plants/${scanResult.id}`); } }; const handleRegisterNew = () => { router.push('/m/quick-add'); }; const handleRescan = () => { setScanResult(null); setError(null); }; return ( <> Scan QR Code - LocalGreenChain
router.push('/m/quick-add')} > Manual } />
{!scanResult && !error && ( )} {/* Loading overlay */} {isLoading && (

Looking up plant...

)} {/* Error state */} {error && !scanResult && (

Scan Error

{error}

)} {/* Success result */} {scanResult && scanResult.data && (

Plant Found!

ID: {scanResult.id}

{/* Plant details */}
Name {scanResult.data.name || 'Unknown'}
Species {scanResult.data.species || 'Unknown'}
Generation {scanResult.data.generation || 1}
{scanResult.data.registeredAt && (
Registered {new Date(scanResult.data.registeredAt).toLocaleDateString()}
)}
{/* Actions */}
)}
); }