import { useState, useEffect } from 'react' import { format, addDays } from 'date-fns' import { Pencil, Check } from 'lucide-react' import { api } from '../lib/api' import { useAuth } from '../contexts/AuthContext' import { FloorMap } from '../components/floormap/FloorMap' import { BookingModal } from '../components/bookings/BookingModal' import { cn } from '../lib/utils' import type { Room, Booking } from '../types' import type { BookingPayload } from '../lib/api' export function FloorMapPage() { const { user } = useAuth() const slug = user?.hotelSlug ?? '' const [rooms, setRooms] = useState([]) const [bookings, setBookings] = useState([]) const [loading, setLoading] = useState(true) const [createForRoom, setCreateForRoom] = useState(null) const [editMode, setEditMode] = useState(false) useEffect(() => { if (!slug) return Promise.all([api.rooms.list(slug), api.bookings.list(slug)]) .then(([r, b]) => { setRooms(r); setBookings(b) }) .catch(console.error) .finally(() => setLoading(false)) }, [slug]) const stats = { total: rooms.length, occupied: rooms.filter(r => r.status === 'occupied').length, available: rooms.filter(r => r.status === 'available').length, maintenance: rooms.filter(r => r.status === 'maintenance' || r.status === 'blocked').length, } if (loading) return (
Загрузка...
) return (
{/* Header */}

Поэтажный план

{editMode ? 'Режим редактирования — перетащите номера, загрузите план этажа' : 'Нажмите на свободный номер чтобы создать бронирование'}

{/* Quick stats */}
{[ { label: 'Всего номеров', value: stats.total, color: 'text-slate-900 dark:text-slate-100' }, { label: 'Занято', value: stats.occupied, color: 'text-red-600 dark:text-red-400' }, { label: 'Свободно', value: stats.available, color: 'text-emerald-600 dark:text-emerald-400' }, { label: 'Ремонт/закрыт', value: stats.maintenance, color: 'text-slate-500 dark:text-slate-400' }, ].map(s => (

{s.label}

{s.value}

))}
{/* Floor map */}
setCreateForRoom(id)} />
{/* Create booking modal */} {createForRoom && ( setCreateForRoom(null)} onSave={async (data) => { try { const created = await api.bookings.create(slug, data as BookingPayload) setBookings(prev => [...prev, created]) } finally { setCreateForRoom(null) } }} /> )}
) }