'use client'; import { useState, useRef } from 'react'; import { Box, Avatar, IconButton, TextField, Typography, Paper, Alert, CircularProgress, } from '@mui/material'; import { PhotoCamera, Person } from '@mui/icons-material'; interface PhotoUploadProps { value: string; onChange: (url: string) => void; label: string; disabled?: boolean; size?: number; } export function PhotoUpload({ value, onChange, label, disabled = false, size = 100 }: PhotoUploadProps) { const [imageError, setImageError] = useState(false); const [uploadError, setUploadError] = useState(''); const [uploading, setUploading] = useState(false); const fileInputRef = useRef(null); const handleImageError = () => { setImageError(true); }; const handleImageLoad = () => { setImageError(false); }; const handleFileSelect = async (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (!file) return; // Validate file type if (!file.type.startsWith('image/')) { setUploadError('Please select an image file'); return; } // Validate file size (max 5MB for base64) const maxSize = 5 * 1024 * 1024; // 5MB if (file.size > maxSize) { setUploadError('Image size must be less than 5MB'); return; } try { setUploading(true); setUploadError(''); // Convert to base64 (simple, works everywhere) const reader = new FileReader(); reader.onload = (e) => { const base64String = e.target?.result as string; onChange(base64String); setUploading(false); setImageError(false); }; reader.onerror = () => { setUploadError('Failed to read image file'); setUploading(false); }; reader.readAsDataURL(file); } catch (error: any) { console.error('Photo processing failed:', error); setUploadError('Failed to process photo'); setUploading(false); } finally { // Reset input if (fileInputRef.current) { fileInputRef.current.value = ''; } } }; const handleCameraClick = () => { fileInputRef.current?.click(); }; return ( {label} {uploadError && ( setUploadError('')} sx={{ width: '100%' }}> {uploadError} )} {!value || imageError ? : null} {uploading ? ( ) : ( )} {/* Photo URL field removed - users upload via camera icon only */} ); }