import { useState, useEffect } from 'react'; import { Calendar, UserCircle, LogIn, Menu, X, BedDouble, Clock, Search, Mail, Lock } from 'lucide-react'; // Rooms data const ROOMS_DATA = [ { id: 1, name: 'Orzah Royal Suite', price: 399, image: 'https://images.unsplash.com/photo-1582719478250-c89cae4dc85b?auto=format&fit=crop&q=80', description: 'Luxurious suite with panoramic city views', capacity: 2, }, { id: 2, name: 'Orzah Presidential Suite', price: 599, image: 'https://images.unsplash.com/photo-1591088398332-8a7791972843?auto=format&fit=crop&q=80', description: 'Ultimate luxury with private butler service', capacity: 4, }, { id: 3, name: 'Orzah Grand Villa', price: 899, image: 'https://images.unsplash.com/photo-1596394516093-501ba68a0ba6?auto=format&fit=crop&q=80', description: 'Exclusive villa with private pool', capacity: 6, }, ]; // Authentication Modal Component const AuthModal = ({ isOpen, onClose, onSuccess }) => { const [isSignUp, setIsSignUp] = useState(false); const [formData, setFormData] = useState({ name: '', email: '', password: '' }); const [error, setError] = useState(''); const handleSubmit = async (e) => { e.preventDefault(); setError(''); try { const endpoint = isSignUp ? '/api/auth/signup' : '/api/auth/login'; const response = await fetch(endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(formData), }); const data = await response.json(); if (response.ok) { localStorage.setItem('token', data.token); onSuccess(data.user); } else { setError(data.message || 'Authentication failed'); } } catch (err) { setError('An error occurred. Please try again.'); } }; if (!isOpen) return null; return (

{isSignUp ? 'Create Account' : 'Welcome Back'}

{error && (
{error}
)}
{isSignUp && (
setFormData({ ...formData, name: e.target.value })} required />
)}
setFormData({ ...formData, email: e.target.value })} required />
setFormData({ ...formData, password: e.target.value })} required />

{isSignUp ? 'Already have an account?' : "Don't have an account?"}{' '}

); }; // Booking Modal Component const BookingModal = ({ isOpen, onClose, room, dates, guests, currentUser }) => { const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(false); const handleBooking = async (e) => { e.preventDefault(); setIsLoading(true); setError(''); try { const response = await fetch('/api/bookings', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${localStorage.getItem('token')}`, }, body: JSON.stringify({ roomId: room.id, checkIn: dates.checkIn, checkOut: dates.checkOut, guests, }), }); const data = await response.json(); if (response.ok) { setSuccess(true); setTimeout(() => { onClose(); }, 2000); } else { setError(data.message || 'Booking failed'); } } catch (err) { setError('An error occurred. Please try again.'); } finally { setIsLoading(false); } }; if (!isOpen) return null; return (

Confirm Booking

{error && (
{error}
)} {success ? (

Booking Confirmed!

Thank you for choosing Orzah International

) : (

{room.name}

${room.price} per night

Check-in: {dates.checkIn}

Check-out: {dates.checkOut}

Guests: {guests}

)}
); }; // Main App Component export default function App() { const [isMenuOpen, setIsMenuOpen] = useState(false); const [isAuthModalOpen, setIsAuthModalOpen] = useState(false); const [isBookingModalOpen, setIsBookingModalOpen] = useState(false); const [selectedRoom, setSelectedRoom] = useState(null); const [currentUser, setCurrentUser] = useState(null); const [searchDates, setSearchDates] = useState({ checkIn: '', checkOut: '' }); const [guests, setGuests] = useState(1); useEffect(() => { const token = localStorage.getItem('token'); if (token) { fetchUserData(token); } }, []); const fetchUserData = async (token) => { try { const response = await fetch('/api/user', { headers: { 'Authorization': `Bearer ${token}` } }); if (response.ok) { const userData = await response.json(); setCurrentUser(userData); } } catch (error) { console.error('Error fetching user data:', error); } }; const handleLogout = () => { localStorage.removeItem('token'); setCurrentUser(null); }; const handleBooking = (room) => { if (!currentUser) { setIsAuthModalOpen(true); } else { setSelectedRoom(room); setIsBookingModalOpen(true); } }; return (
{/* Navigation */} {/* Mobile Menu */} {isMenuOpen && (
Suites {currentUser && ( My Bookings )}
)} {/* Hero Section */}
Orzah International Hotel

WELCOME TO ORZAH

WHERE LUXURY MEETS EXCELLENCE

{/* Search Box */}
setSearchDates({...searchDates, checkIn: e.target.value})} />
setSearchDates({...searchDates, checkOut: e.target.value})} />
{/* Available Rooms Section */}

LUXURY ACCOMMODATIONS

{ROOMS_DATA.map((room) => (
{room.name}

{room.name}

{room.description}

Up to {room.capacity} guests

${room.price}/night

))}
{/* Modals */} {isAuthModalOpen && ( setIsAuthModalOpen(false)} onSuccess={(userData) => { setCurrentUser(userData); setIsAuthModalOpen(false); }} /> )} {isBookingModalOpen && ( setIsBookingModalOpen(false)} room={selectedRoom} dates={searchDates} guests={guests} currentUser={currentUser} /> )}
); }