import React, { useState, useEffect } from 'react'; import { useParams, Link, useNavigate } from 'react-router-dom'; import axios from 'axios'; import { ArrowLeft, Clock, Calendar, Check, Phone, Mail, User } from 'lucide-react'; import { Button } from '../components/ui/button'; import { Badge } from '../components/ui/badge'; import { Input } from '../components/ui/input'; import { Textarea } from '../components/ui/textarea'; import { Label } from '../components/ui/label'; import { Separator } from '../components/ui/separator'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from '../components/ui/dialog'; import { toast } from 'sonner'; const API = `${process.env.REACT_APP_BACKEND_URL}/api`; const ServiceDetail = () => { const { id } = useParams(); const navigate = useNavigate(); const [service, setService] = useState(null); const [loading, setLoading] = useState(true); const [bookingOpen, setBookingOpen] = useState(false); const [submitting, setSubmitting] = useState(false); const [formData, setFormData] = useState({ name: '', email: '', phone: '', preferred_date: '', notes: '' }); useEffect(() => { const fetchService = async () => { try { const response = await axios.get(`${API}/services/${id}`); setService(response.data); } catch (error) { console.error('Failed to fetch service:', error); } finally { setLoading(false); } }; fetchService(); }, [id]); const handleSubmit = async (e) => { e.preventDefault(); setSubmitting(true); try { await axios.post(`${API}/services/book`, { service_id: service.id, ...formData }); toast.success('Booking submitted successfully! We will contact you soon.'); setBookingOpen(false); setFormData({ name: '', email: '', phone: '', preferred_date: '', notes: '' }); } catch (error) { toast.error('Failed to submit booking. Please try again.'); } finally { setSubmitting(false); } }; if (loading) { return (
{service.description}
{item.desc}
${service.price.toFixed(2)}
No payment required for booking