"use client"; import { useState, useEffect } from "react"; import { Calendar, Users, CheckCircle } from "lucide-react"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Excursion } from "@/lib/types/excursions"; export default function ExcursionBooking() { const [excursions, setExcursions] = useState([]); const [loading, setLoading] = useState(true); const [selectedExcursion, setSelectedExcursion] = useState(null); const [formData, setFormData] = useState({ name: "", email: "", phone: "", date: "", participants: 1, }); const [submitting, setSubmitting] = useState(false); const [success, setSuccess] = useState(false); useEffect(() => { const fetchExcursions = async () => { try { const response = await fetch("/api/excursions"); const data = await response.json(); setExcursions(data); } catch (error) { console.error("Erreur lors du chargement des excursions:", error); } finally { setLoading(false); } }; fetchExcursions(); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!selectedExcursion) return; setSubmitting(true); try { const response = await fetch("/api/excursions", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ excursionId: selectedExcursion.id, ...formData, }), }); const result = await response.json(); if (result.success) { setSuccess(true); setFormData({ name: "", email: "", phone: "", date: "", participants: 1 }); setTimeout(() => { setSuccess(false); setSelectedExcursion(null); }, 3000); } } catch (error) { console.error("Erreur lors de la réservation:", error); } finally { setSubmitting(false); } }; const getExcursionTypeLabel = (type: string) => { switch (type) { case "tour-lagon": return "Tour Lagon"; case "plongee": return "Plongée"; case "4x4": return "4x4"; default: return type; } }; if (loading) { return (
Chargement des excursions...
); } if (success) { return (

Réservation confirmée !

Votre demande de réservation a été enregistrée. Nous vous contacterons bientôt.

); } if (selectedExcursion) { return ( Réserver : {selectedExcursion.name}
setFormData({ ...formData, name: e.target.value })} className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />
setFormData({ ...formData, email: e.target.value })} className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />
setFormData({ ...formData, phone: e.target.value })} className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />
setFormData({ ...formData, date: e.target.value })} className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />
setFormData({ ...formData, participants: parseInt(e.target.value) }) } className="w-full px-4 py-2 border border-gray-300 rounded-xl focus:ring-2 focus:ring-primary focus:border-transparent" />

Total

{selectedExcursion.price * formData.participants} XPF

); } return ( Réservation d'excursions
{excursions.map((excursion) => (

{excursion.name}

{getExcursionTypeLabel(excursion.type)}

{excursion.description}

{excursion.duration}

{excursion.price.toLocaleString()} XPF

par personne

))}
); }