// room-modal.jsx — Add / Edit room const ROOM_TYPES = ['Standard', 'Deluxe', 'Suite', 'Suite Panorama']; const BED_OPTIONS = [ '1 giường đôi', '2 giường đơn', '1 giường King', '2 giường Queen', '1 giường King + sofa', '1 giường Super King', '1 King + 1 đơn', ]; const FEATURE_SUGGESTIONS = [ { g: 'View', items: ['Hướng vườn', 'View núi', 'View thung lũng', 'View rừng thông', 'View hồ', 'View toàn cảnh'] }, { g: 'Không gian', items: ['Ban công', 'Ban công lớn', 'Sân riêng', 'Sân thượng', 'Sân thượng ngắm sao'] }, { g: 'Tiện nghi', items: ['Bồn tắm', 'Bồn tắm ngoài trời', 'Jacuzzi', 'Vòi sen mưa', 'Bếp nhỏ', 'Bếp riêng'] }, { g: 'Sưởi & TV', items: ['Lò sưởi điện', 'Lò sưởi củi', 'Tivi 4K', 'Máy lạnh', 'Máy pha cà phê'] }, { g: 'Làm việc', items: ['Wi-Fi nhanh', 'Bàn làm việc', 'Phòng họp nhỏ'] }, { g: 'Khác', items: ['Pet-friendly', 'Family friendly', 'Honeymoon setup', 'Tủ lạnh mini'] }, ]; const INITIAL_STATUSES = [ { k: 'available', l: 'Sẵn sàng đón khách', c: '#137333' }, { k: 'cleaning', l: 'Cần dọn', c: '#f29900' }, { k: 'maintenance', l: 'Bảo trì', c: '#5f6368' }, ]; function RoomModal({ room, existingRooms, onClose, onSave, onDelete }) { const isEdit = !!room; const [form, setForm] = React.useState(() => { if (room) return { ...room, features: room.features ? [...room.features] : [] }; // Default for new room — auto-suggest next number based on highest floor const maxNum = existingRooms.reduce((mx, r) => Math.max(mx, parseInt(r.number) || 0), 0); return { number: maxNum > 0 ? String(maxNum + 1) : '101', name: '', floor: maxNum > 0 ? Math.floor(maxNum / 100) || 1 : 1, type: 'Standard', bed: '1 giường đôi', cap: 2, price: 850000, status: 'available', features: [], }; }); const [customFeature, setCustomFeature] = React.useState(''); const set = (k, v) => setForm(f => ({ ...f, [k]: v })); const toggleFeature = (f) => { setForm(curr => ({ ...curr, features: curr.features.includes(f) ? curr.features.filter(x => x !== f) : [...curr.features, f], })); }; const addCustomFeature = () => { const v = customFeature.trim(); if (!v) return; if (!form.features.includes(v)) setForm(curr => ({ ...curr, features: [...curr.features, v] })); setCustomFeature(''); }; // Duplicate number check const numConflict = existingRooms.some(r => r.number === form.number && r.id !== form.id); const canSave = form.number && !numConflict && form.bed && form.price > 0; const handleSave = () => { if (!canSave) return; const id = form.id || ('r' + form.number); onSave({ ...form, id, price: Number(form.price), cap: Number(form.cap), floor: Number(form.floor) }); }; // Preview card const previewType = form.type.startsWith('Suite') ? 'Suite' : form.type; return (