import { useState } from 'react' import { Modal } from '../ui/Modal' import { cn } from '../../lib/utils' import type { Room, RoomStatus, HousekeepingStatus, BedType } from '../../types' const AMENITY_LIST = [ 'Wi-Fi', 'TV', 'AC', 'Mini-bar', 'Bathrobe', 'Jacuzzi', 'Panoramic view', 'Kitchen', 'Washing machine', 'Butler', 'Terrace', ] const ROOM_TYPES = ['Стандарт', 'Делюкс', 'Полулюкс', 'Люкс', 'Пентхаус', 'Апартаменты', 'Другой'] const BED_TYPES: { value: BedType; label: string }[] = [ { value: 'single', label: 'Одна кровать' }, { value: 'double', label: 'Двуспальная' }, { value: 'queen', label: 'Queen' }, { value: 'king', label: 'King' }, { value: 'twin', label: 'Две кровати' }, ] const ROOM_STATUSES: { value: RoomStatus; label: string }[] = [ { value: 'available', label: 'Свободен' }, { value: 'occupied', label: 'Занят' }, { value: 'maintenance', label: 'Ремонт' }, { value: 'blocked', label: 'Закрыт' }, ] const HK_STATUSES: { value: HousekeepingStatus; label: string }[] = [ { value: 'clean', label: 'Чистый' }, { value: 'dirty', label: 'Грязный' }, { value: 'cleaning', label: 'Убирается' }, { value: 'inspect', label: 'Проверка' }, ] interface RoomModalProps { open: boolean room?: Room onClose: () => void onSave: (room: Room) => void } export function RoomModal({ open, room, onClose, onSave }: RoomModalProps) { const isEdit = !!room const [form, setForm] = useState({ number: room?.number ?? '', name: room?.name ?? '', floor: room?.floor ?? 1, type: room?.type ?? 'Стандарт', bedType: (room?.bedType ?? 'double') as BedType, maxGuests: room?.maxGuests ?? 2, baseRate: room?.baseRate ?? 5000, status: (room?.status ?? 'available') as RoomStatus, housekeepingStatus: (room?.housekeepingStatus ?? 'clean') as HousekeepingStatus, sortOrder: room?.sortOrder ?? 99, allowHourly: room?.allowHourly ?? false, hourlyRate: room?.hourlyRate ?? 1000, }) const [amenities, setAmenities] = useState(room?.amenities ?? ['Wi-Fi', 'TV', 'AC']) const set = (k: K, v: typeof form[K]) => setForm(prev => ({ ...prev, [k]: v })) const toggleAmenity = (a: string) => setAmenities(prev => prev.includes(a) ? prev.filter(x => x !== a) : [...prev, a]) const handleSave = () => { if (!form.number) return const saved: Room = { id: room?.id ?? `r-${Date.now()}`, hotelId: room?.hotelId ?? 'hotel-1', number: form.number, name: form.name || undefined, floor: form.floor, type: form.type, bedType: form.bedType, maxGuests: form.maxGuests, baseRate: form.baseRate, status: form.status, housekeepingStatus: form.housekeepingStatus, amenities, sortOrder: form.sortOrder, allowHourly: form.allowHourly || undefined, hourlyRate: form.allowHourly ? form.hourlyRate : undefined, } onSave(saved) } return ( } >
{/* Row 1: Number | Name */}
set('number', e.target.value)} />
set('name', e.target.value)} />
{/* Row 2: Floor | Type */}
set('floor', parseInt(e.target.value) || 1)} />
{/* Row 3: Bed type | Max guests */}
set('maxGuests', parseInt(e.target.value) || 1)} />
{/* Row 4: Base rate | Status */}
set('baseRate', parseInt(e.target.value) || 0)} />
{/* Row 5: Housekeeping | Sort order */}
set('sortOrder', parseInt(e.target.value) || 1)} />
{/* Hourly section */}

Почасовая аренда

{form.allowHourly && (
set('hourlyRate', parseInt(e.target.value) || 0)} />
)} {!form.allowHourly && (

Разрешить бронирование номера на несколько часов

)}
{/* Amenities */}
{AMENITY_LIST.map(a => { const selected = amenities.includes(a) return ( ) })}
) }