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
};