import { useState, useEffect } from 'react'; import { Upload, Download, Check, AlertCircle, Loader2, X } from 'lucide-react'; import api from '../api/api'; const DeliveryPanel = ({ bookingId, photographerId, role = 'photographer' }) => { const [delivery, setDelivery] = useState(null); const [loading, setLoading] = useState(true); const [uploading, setUploading] = useState(false); const [showUploadForm, setShowUploadForm] = useState(false); useEffect(() => { fetchDelivery(); }, [bookingId]); const fetchDelivery = async () => { try { const res = await api.get(`/delivery/booking/${bookingId}`); setDelivery(res.data); } catch (err) { // Delivery record might not exist yet console.log('Delivery record not yet created'); } finally { setLoading(false); } }; const handlePhotoUpload = async (e) => { const files = e.target.files; if (!files || files.length === 0) return; setUploading(true); try { const photoUrls = Array.from(files).map(file => URL.createObjectURL(file)); const res = await api.post(`/delivery/${delivery._id}/upload`, { photoUrls, }); setDelivery(res.data); alert(`${files.length} photos uploaded!`); setShowUploadForm(false); } catch (err) { alert('Failed to upload photos'); } finally { setUploading(false); } }; const handleCompleteDelivery = async () => { try { const res = await api.post(`/delivery/${delivery._id}/complete`, { downloadLinkExpiryDays: 7, }); setDelivery(res.data); alert('Delivery marked as complete!'); } catch (err) { alert('Failed to complete delivery'); } }; if (loading) { return (
); } if (!delivery) { return (

Delivery not yet created for this booking

); } const statusColor = { pending: 'gray', partially_delivered: 'blue', delivered: 'green', revision_requested: 'orange', }; return (

📦 Photo Delivery

{delivery.status.replace('_', ' ').toUpperCase()}
{/* Photos Grid */} {delivery.photos && delivery.photos.length > 0 && (

{delivery.photos.length} Photos Uploaded

{delivery.photos.map((photo, idx) => (
{`Photo {photo.watermarked && (
Watermarked
)}
))}
)} {/* Upload Form */} {role === 'photographer' && delivery.status !== 'delivered' && (
{!showUploadForm ? ( ) : (
{uploading &&

Uploading...

}
)}
)} {/* Action Buttons */} {role === 'photographer' && delivery.status === 'partially_delivered' && ( )} {/* Customer Download Section */} {role === 'customer' && delivery.status === 'delivered' && delivery.downloadLink && (
Photos Delivered!

Download link expires on{' '} {new Date(delivery.linkExpiresAt).toLocaleDateString()}

Download Photos
)} {/* Revision Request */} {delivery.status === 'revision_requested' && (
Revision Requested

{delivery.revisionNotes}

{role === 'photographer' && (

Please review and upload revised photos

)}
)}
); }; export default DeliveryPanel;