# Инструкция по добавлению функционала бронирования с временем

## 📋 Что было добавлено

1. **Выбор времени при бронировании** - на третьем этапе теперь можно выбрать не только дату, но и время
2. **Проверка доступности** - система автоматически проверяет доступность временных слотов с учетом количества компьютеров
3. **Админ-панель** - на главной странице админки теперь отображается информация о всех бронированиях по часам
4. **Сохранение в БД** - все бронирования теперь сохраняются в базу данных

## 🗄️ Обновление базы данных

### Шаг 1: Выполните SQL скрипт

Откройте файл `DATABASE_UPDATE.sql` и выполните его содержимое в вашей MySQL базе данных.

Вы можете сделать это через:
- phpMyAdmin
- MySQL Workbench
- Командную строку MySQL
- Любой другой MySQL клиент

### Шаг 2: Проверьте создание таблицы

После выполнения скрипта проверьте, что таблица `bookings` создана:

```sql
SHOW TABLES LIKE 'bookings';
DESCRIBE bookings;
```

## 📊 Структура таблицы bookings

Таблица содержит следующие поля:
- `id` - уникальный идентификатор
- `type` - тип активности (pc, ps, tv, zayvka)
- `room` - тип комнаты (solo, duo, trio, bootcamp 5, bootcamp 6)
- `date_time` - полная дата и время бронирования
- `time_slot` - временной слот в формате HH:00 (например, 14:00)
- `name` - имя клиента
- `game` - название игры (опционально)
- `contact` - контактный номер телефона
- `contact_method` - способ связи (telegram, whatsapp, phone)
- `status` - статус бронирования (pending, confirmed, cancelled)
- `created_at` - дата создания записи

## 🎮 Количество компьютеров по типам комнат

Система учитывает следующие ограничения:
- **solo** - 5 компьютеров
- **duo** - 4 компьютера
- **trio** - 3 компьютера
- **bootcamp 5** - 2 компьютера
- **bootcamp 6** - 1 компьютер

## 🔧 API Endpoints

### Получение доступных временных слотов
```
GET /api/bookings/available-slots?date=2026-01-25&room=solo
```

Возвращает список всех часов (00:00 - 23:00) с информацией о доступности.

### Создание бронирования
```
POST /api/bookings
Body: {
  type: "pc",
  room: "solo",
  date: "2026-01-25",
  time: "14:00",
  name: "Иван",
  game: "CS2",
  contact: "+7 (777) 123-45-67",
  contactMethod: "telegram"
}
```

### Получение бронирований (для админки)
```
GET /api/admin/bookings?date=2026-01-25&room=solo
```

### Обновление статуса бронирования
```
PUT /api/admin/bookings
Body: {
  id: 1,
  status: "confirmed"
}
```

### Удаление бронирования
```
DELETE /api/admin/bookings?id=1
```

## 🎨 Интерфейс

### Форма бронирования

На третьем этапе (`pc3`) теперь:
1. Выбирается дата
2. После выбора даты автоматически загружаются доступные временные слоты
3. Пользователь видит сетку с часами (00:00 - 23:00)
4. Недоступные слоты (когда все компьютеры заняты) отображаются серым цветом и неактивны
5. Доступные слоты можно выбрать

### Админ-панель

На главной странице админки (`/admin`):
1. Выбор даты для просмотра бронирований
2. Фильтр по типу комнаты (или все комнаты)
3. Таблица по часам для каждой комнаты с индикацией занятости:
   - 🟢 Зеленый - есть свободные места
   - 🔴 Красный - все места заняты
4. Список всех бронирований с возможностью:
   - Изменения статуса (Ожидает / Подтверждено / Отменено)
   - Удаления бронирования

## ✅ Проверка работы

После установки проверьте:

1. **Форма бронирования:**
   - Откройте форму бронирования
   - Пройдите до этапа выбора даты и времени
   - Убедитесь, что после выбора даты появляются временные слоты
   - Попробуйте создать бронирование

2. **Админ-панель:**
   - Войдите в админ-панель
   - Перейдите на главную страницу
   - Убедитесь, что отображаются таблицы с бронированиями по часам
   - Попробуйте изменить статус бронирования

3. **База данных:**
   - Проверьте, что новые бронирования сохраняются в таблицу `bookings`
   - Убедитесь, что данные корректны

## 🐛 Возможные проблемы

### Ошибка "Table 'bookings' doesn't exist"
- Убедитесь, что вы выполнили SQL скрипт из `DATABASE_UPDATE.sql`

### Временные слоты не загружаются
- Проверьте консоль браузера на наличие ошибок
- Убедитесь, что API endpoint `/api/bookings/available-slots` доступен
- Проверьте, что в запросе передаются параметры `date` и `room`

### Бронирование не сохраняется
- Проверьте логи сервера
- Убедитесь, что все обязательные поля заполнены
- Проверьте подключение к базе данных

## 📝 Дополнительные настройки

Если вы хотите изменить количество компьютеров для какого-то типа комнаты, отредактируйте константу `ROOM_CAPACITY` в файлах:
- `src/app/api/bookings/available-slots/route.ts`
- `src/app/admin/page.tsx`

## 🎉 Готово!

Теперь ваша система бронирования поддерживает выбор времени с автоматической проверкой доступности!
