# Элегантное решение: "Быстрая игра" (Matchmaking)

## 1. Концепция "Один тап до игры"

Текущая система с кодами хороша для игры с друзьями, но для случайных соперников она слишком сложна. Мы внедрим систему **автоматического матчмейкинга** (поиска соперника), которая будет работать параллельно с приватными комнатами.

### Как это будет выглядеть для игрока:
1. Игрок заходит в приложение (авторизован через Google или как гость).
2. Нажимает кнопку **"Играть онлайн"**.
3. Попадает в Лобби, где видит **ДВЕ** главные кнопки:
   - 🚀 **"Быстрая игра"** (Огромная золотая кнопка)
   - 🤝 **"Играть с другом"** (Кнопка поменьше, открывает меню с кодами)
4. При нажатии на **"Быстрая игра"**:
   - Система ищет любую свободную комнату со статусом `waiting`.
   - Если находит — игрок мгновенно подключается (без ввода кодов).
   - Если не находит — система сама создаёт комнату и ждёт следующего игрока, который нажмёт "Быстрая игра".

## 2. Техническая реализация (Roadmap)

### Этап 1: Обновление логики базы данных (Supabase)
Нам нужна новая функция для поиска свободной комнаты.
- **Действие:** Создать функцию `find_random_room()` в `src/services/gameRooms.ts`.
- **Логика:**
  1. Сделать запрос к таблице `games`: найти одну запись, где `status = 'waiting'` и `white_player_id != current_player_id`.
  2. Если комната найдена — вернуть её ID и код.
  3. Если комнат нет — вернуть `null`.

### Этап 2: Обновление UI Лобби (`Lobby.tsx`)
Переработать интерфейс Лобби для акцента на быстрой игре.
- **Действие:** Изменить `mode === "menu"`.
- **Новый UI:**
  - Кнопка **"🚀 Быстрая игра (Случайный соперник)"** — главная, самая большая.
  - Кнопка **"🤝 Играть с другом (По коду)"** — открывает текущий интерфейс с созданием/вводом кода.
- **Логика "Быстрой игры":**
  1. Показать спиннер "Поиск соперника...".
  2. Вызвать `find_random_room()`.
  3. Если комната найдена -> вызвать `joinRoom(code)`.
  4. Если не найдена -> вызвать `createRoom()` и перейти в режим ожидания.

### Этап 3: Интеграция с профилями (Google Auth)
Система должна красиво отображать, кто с кем играет.
- **Действие:** Убедиться, что `PlayerCard` в `OnlineGame.tsx` корректно подтягивает аватарки и имена из Google.
- **Логика:** При входе через Google (в `Callback.tsx`), данные уже сохраняются в таблицу `profiles`. В онлайн-игре мы просто будем показывать эти данные. Если игрок гость — показываем стандартную иконку и имя "Гость".

### Этап 4: Тестирование и сборка
- **Действие:** Проверить флоу:
  - Игрок А нажимает "Быстрая игра" -> создаётся комната, крутится спиннер.
  - Игрок Б нажимает "Быстрая игра" -> мгновенно подключается к Игроку А.
  - Игра начинается.
- **Действие:** Собрать новый APK.

## 3. Почему это гениально?
1. **Минимум действий:** Игроку не нужно думать о кодах, если он просто хочет поиграть.
2. **Удержание аудитории:** Чем быстрее начинается игра, тем меньше шанс, что игрок закроет приложение.
3. **Сохранение старого функционала:** Игра с друзьями по кодам никуда не исчезает, она просто убрана на второй план.
4. **Бесшовная интеграция:** Это не требует сложных изменений в архитектуре, мы просто используем уже существующую таблицу `games` умнее.

---
**Брат, если концепция нравится — дай добро, и я реализую это за один прогон!**
