const ROOM_TYPES = { economy: { id: '2x-местный', name: '2x-местный', pricePerGuest: 1500 }, standard: { id: '3х-местный', name: '3х-местный', pricePerGuest: 2000 }, family: { id: 'Семейный', name: 'Семейный', pricePerGuest: 3000 }, vip: { id: 'Люкс', name: 'Люкс', pricePerGuest: 4500 } }; const FURNITURE_TYPES = [ { id: 'double_bed', name: 'Двуспальная кровать' }, { id: 'single_beds', name: 'Односпальные кровати' }, { id: 'sofa', name: 'Диван' }, { id: 'wardrobe', name: 'Шкаф' }, { id: 'table', name: 'Стол' }, { id: 'chairs', name: 'Стулья' }, { id: 'nightstands', name: 'Прикроватные тумбочки' }, { id: 'hanger', name: 'Вешалка' }, { id: 'mirror', name: 'Зеркало' } ]; const AMENITY_TYPES = [ { id: 'has_ac', name: 'Кондиционер', icon: 'snowflake' }, { id: 'has_tv', name: 'Телевизор', icon: 'tv' }, { id: 'has_fridge', name: 'Холодильник', icon: 'sink' }, { id: 'has_wifi', name: 'Wi-Fi интернет', icon: 'wifi' }, { id: 'has_kettle', name: 'Электрический чайник', icon: 'mug-hot' }, { id: 'has_hairdryer', name: 'Фен', icon: 'wind' }, { id: 'has_shower', name: 'Душ в номере', icon: 'shower' }, { id: 'has_sea_view', name: 'Вид на море', icon: 'water' } ]; const BOOKING_STATUSES = { NEW: 'новая', PAID: 'оплачена', RESERVED: 'зарезервирована', CHECKED_IN: 'заселена', CHECKED_OUT: 'выехала', CANCELLED: 'отменена' }; const DEFAULT_ROOMS = [ { type: ROOM_TYPES.economy.id, name: '2x-местный', description: 'Уютный номер на двоих с одной или двумя кроватями. Идеально для пары или друзей. Кондиционер, TV, холодильник, Wi-Fi.', rooms_count: 15, area_sqm: 20, furniture: ['double_bed', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'], amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle'], floors: [1, 2, 3], max_guests: 2, price_per_night: 1500, image_path: 'img/1faae356b-9f79-489d-8165-c37a47b82040.webp', extra_beds: 15, extra_bed_price: 1000 }, { type: ROOM_TYPES.standard.id, name: '3х-местный', description: 'Комфортный трёхместный номер с односпальными или двуспальной кроватью. Просторный и светлый с видом на море.', rooms_count: 8, area_sqm: 20, furniture: ['single_beds', 'double_bed', 'table', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'], amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle', 'has_sea_view'], floors: [1, 2, 3], max_guests: 3, price_per_night: 2000, image_path: 'img/1006bc9be-64c6-43e3-9625-1a862d04930c.webp', extra_beds: 0, extra_bed_price: 0 }, { type: ROOM_TYPES.family.id, name: 'Семейный', description: 'Просторный двухкомнатный номер для семьи до 4 человек. Две спальни с двуспальными кроватями. Возможны дополнительные места.', rooms_count: 4, area_sqm: 40, furniture: ['double_bed', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'], amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle', 'has_hairdryer'], floors: [2], max_guests: 4, price_per_night: 3000, image_path: 'img/1eae46658-cfca-4b65-82f0-e5868af5541b.webp', extra_beds: 15, extra_bed_price: 1000 }, { type: ROOM_TYPES.vip.id, name: 'Люкс', description: 'Элегантный двухкомнатный люкс с двуспальной кроватью, гостиной зоной и великолепным видом на море. Премиум-комфорт.', rooms_count: 3, area_sqm: 50, furniture: ['double_bed', 'sofa', 'wardrobe', 'chairs', 'nightstands', 'hanger', 'mirror'], amenities: ['has_ac', 'has_tv', 'has_fridge', 'has_wifi', 'has_kettle', 'has_hairdryer', 'has_shower', 'has_sea_view'], floors: [2], max_guests: 4, price_per_night: 4500, image_path: 'img/1eae46658-cfca-4b65-82f0-e5868af5541b.webp', extra_beds: 0, extra_bed_price: 0 } ]; const ROOM_PRICES = { [ROOM_TYPES.economy.id]: ROOM_TYPES.economy.pricePerGuest, [ROOM_TYPES.standard.id]: ROOM_TYPES.standard.pricePerGuest, [ROOM_TYPES.family.id]: ROOM_TYPES.family.pricePerGuest, [ROOM_TYPES.vip.id]: ROOM_TYPES.vip.pricePerGuest }; const STATUS_LIST = [ BOOKING_STATUSES.NEW, BOOKING_STATUSES.PAID, BOOKING_STATUSES.RESERVED, BOOKING_STATUSES.CHECKED_IN, BOOKING_STATUSES.CHECKED_OUT, BOOKING_STATUSES.CANCELLED ]; const ROOM_TYPE_LIST = [ ROOM_TYPES.economy.id, ROOM_TYPES.standard.id, ROOM_TYPES.family.id, ROOM_TYPES.vip.id ]; function getRoomPrice(roomType) { return ROOM_PRICES[roomType] || 0; } function calculateNights(checkin, checkout) { const ci = new Date(checkin); const co = new Date(checkout); return Math.ceil((co - ci) / (1000 * 60 * 60 * 24)); } function calculateBasePrice(roomType, checkin, checkout) { const pricePerNight = getRoomPrice(roomType); const nights = calculateNights(checkin, checkout); return pricePerNight * nights; } function getRoomBasePriceByType(type) { const room = DEFAULT_ROOMS.find(r => r.type === type); return room ? room.price_per_night : 0; } module.exports = { ROOM_TYPES, FURNITURE_TYPES, AMENITY_TYPES, BOOKING_STATUSES, DEFAULT_ROOMS, ROOM_PRICES, STATUS_LIST, ROOM_TYPE_LIST, getRoomPrice, getRoomBasePriceByType, calculateNights, calculateBasePrice };