import { NextRequest, NextResponse } from 'next/server';
import { bd } from '@/lib/bd';

// Количество компьютеров по типам комнат
const ROOM_CAPACITY: Record<string, number> = {
    'solo': 5,
    'duo': 4,
    'trio': 3,
    'bootcamp 5': 2,
    'bootcamp 6': 1,
};

// Генерируем все часы дня (0-23)
function generateAllHours(): string[] {
    return Array.from({ length: 24 }, (_, i) => {
        const hour = i.toString().padStart(2, '0');
        return `${hour}:00`;
    });
}

export async function GET(req: NextRequest) {
    try {
        const { searchParams } = new URL(req.url);
        const date = searchParams.get('date');
        const room = searchParams.get('room');

        if (!date || !room) {
            return NextResponse.json(
                { error: 'Необходимы параметры date и room' },
                { status: 400 }
            );
        }

        // Получаем все бронирования на эту дату и для этого типа комнаты
        const [bookings] = await bd.query(
            `SELECT time_slot, room FROM bookings 
             WHERE DATE(date_time) = ? AND room = ? AND status != 'cancelled'`,
            [date, room]
        ) as any[];

        // Подсчитываем количество бронирований на каждый час
        const bookingsByHour: Record<string, number> = {};
        bookings.forEach((booking: any) => {
            const hour = booking.time_slot;
            bookingsByHour[hour] = (bookingsByHour[hour] || 0) + 1;
        });

        // Получаем максимальное количество компьютеров для этого типа комнаты
        const maxCapacity = ROOM_CAPACITY[room] || 0;

        // Генерируем все часы и проверяем доступность
        const allHours = generateAllHours();
        const availableSlots = allHours.map(hour => {
            const bookedCount = bookingsByHour[hour] || 0;
            const isAvailable = bookedCount < maxCapacity;
            return {
                time: hour,
                available: isAvailable,
                booked: bookedCount,
                total: maxCapacity,
            };
        });

        return NextResponse.json({ slots: availableSlots });
    } catch (error) {
        console.error('Ошибка при получении доступных слотов:', error);
        return NextResponse.json(
            { error: 'Ошибка сервера' },
            { status: 500 }
        );
    }
}
