# Game Marathon — Концепция

## Общее описание

**Game Marathon** — закрытая платформа для проведения игровых марафонов среди друзей (~10 человек), где за месяц нужно набрать максимум очков, выполняя случайные челленджи в случайных играх.

### Ключевые особенности

- Колесо рандома (игра → челлендж)
- Игры добавляют сами участники + ссылки на скачивание
- Челленджи генерирует нейросеть (интегрированное API)
- Пруфы обязательны (скриншоты/видео/Steam ачивки) — загружаются на сервер
- Социальные механики (вызовы, ставки, события)
- Уведомления через Telegram-бота
- Авторизация по логину/паролю

---

## Жизненный цикл марафона

### Фаза 1: Подготовка (3-7 дней до старта)

**Действия участников:**

1. Присоединяются к марафону (по ссылке-приглашению)
2. Добавляют игры (название + ссылка на скачивание + обложка)
3. Когда все готовы — организатор "закрывает" список игр
4. Система (нейросеть) генерирует челленджи для каждой игры
5. Участники могут посмотреть/предложить правки к челленджам
6. Организатор запускает марафон

**Добавление игры включает:**

- Название игры
- Ссылка на скачивание (для платных игр — сторонние ресурсы)
- Обложка (загрузка или URL)
- Жанр (опционально)

### Фаза 2: Генерация челленджей

После закрытия списка игр — автоматический запрос к API нейросети.

**Для каждой игры генерируется 5-7 челленджей:**

- 2 лёгких (15-30 минут)
- 2-3 средних (1-2 часа)
- 1-2 сложных (3+ часов)

**Каждый челлендж содержит:**

- Название
- Описание
- Тип (completion/no-death/speedrun/collection/achievement/etc)
- Примерное время выполнения
- Способ проверки (скриншот/видео/Steam ачивка)
- Количество очков

После генерации участники могут предложить правки или добавить свои челленджи.

### Фаза 3: Активный марафон (1 месяц)

**Процесс выполнения:**

```
1. Крутишь колесо игр
         ↓
   Выпадает случайная игра
         ↓
2. Крутишь колесо челленджей (для этой игры)
         ↓
   Выпадает случайный челлендж
         ↓
3. Выбор:
   • Принять → идёшь выполнять
   • Дроп → штраф, крутишь заново
         ↓
4. Выполняешь задание
         ↓
5. Загружаешь пруф (скрин/видео/ссылка на Steam профиль)
         ↓
6. Получаешь очки + streak продолжается
         ↓
7. Можешь крутить снова
```

---

## Система очков

### Базовые очки

Зависят от сложности челленджа (определяет нейросеть при генерации):

| Сложность | Очки |
|-----------|------|
| Лёгкий | 30-50 |
| Средний | 60-100 |
| Сложный | 120-200 |

### Streak бонус

Последовательное выполнение заданий без дропов:

| Streak | Бонус |
|--------|-------|
| 1 | +0% |
| 2 | +10% |
| 3 | +20% |
| 4 | +30% |
| 5+ | +40% (максимум) |

### Дроп штрафы

Прогрессивная система штрафов:

| Дроп # | Штраф |
|--------|-------|
| 1 | Бесплатно (streak сбрасывается) |
| 2 | -10 очков |
| 3 | -25 очков |
| 4 | -50 очков |
| 5+ | -50 очков + кулдаун 2 часа |

Штрафы сбрасываются после успешного выполнения задания.

---

## Подтверждение выполнения

### Типы пруфов

- **Скриншот** — загружается на сервер
- **Видео** — загружается на сервер или ссылка (YouTube)
- **Steam Achievement** — ссылка на профиль Steam с ачивкой

### Процесс верификации

1. Участник загружает пруф + опциональный комментарий
2. Пруф виден всем участникам в ленте активности
3. Любой участник может "оспорить" пруф (если считает невалидным)
4. Если нет споров за 24 часа — автоматически засчитывается
5. При споре — голосование участников или решение организатора

---

## Социальные механики

### Лента активности

Отображает в реальном времени:

- Выполненные челленджи (с пруфами)
- Дропы
- Кто крутит колесо и что выпало
- События марафона
- Вызовы между участниками

### Вызов (Challenge)

Когда участник выполнил челлендж, другие могут "вызвать" себя на тот же:

- Вызов заменяет текущее активное задание
- Награда: стандартные очки за челлендж
- Бонус: +30 очков если выполнить быстрее оригинального исполнителя

### Ставка (Bet)

Перед началом выполнения участник может поставить часть своих очков:

- **Выполнил:** награда + ставка x2
- **Дропнул/провалил:** теряет ставку

Варианты ставок: 0 / 25 / 50 / 100 очков

---

## Система событий

Случайные события во время марафона (1-2 раза в неделю). Могут запускаться автоматически или вручную организатором.

| Событие | Описание | Длительность |
|---------|----------|--------------|
| **Золотой час** | Все очки x1.5 | 30-60 минут |
| **Общий враг** | Все получают одинаковое задание, топ-3 = бонус | До выполнения |
| **Двойной риск** | Дропы бесплатны, но очки x0.5 | 2 часа |
| **Джекпот** | Следующему кто крутит — гарантированно сложный челлендж с x3 очками | 1 спин |
| **Обмен** | Можно поменяться заданием с другим участником | 1 час |
| **Реванш** | Можно переделать любой свой проваленный челлендж за 50% очков | 4 часа |

---

## Таблица лидеров

Отображает для каждого участника:

- Место в рейтинге
- Общее количество очков
- Текущий streak
- Количество выполненных челленджей
- Количество дропов

---

## Модель данных

### User (Пользователь)

```
- id
- login
- password_hash
- nickname
- avatar
- telegram_id (для уведомлений)
- created_at
```

### Marathon (Марафон)

```
- id
- title
- description
- organizer_id (User)
- start_date
- end_date
- status: preparing | active | finished
- invite_code
- settings (JSON: события вкл/выкл, etc)
- created_at
```

### Participant (Участник марафона)

```
- id
- user_id
- marathon_id
- total_points
- current_streak
- drop_count (текущий счётчик для штрафов)
- joined_at
```

### Game (Игра)

```
- id
- marathon_id
- title
- cover_image (путь к файлу на сервере)
- download_link
- genre
- added_by (User)
- created_at
```

### Challenge (Челлендж)

```
- id
- game_id
- title
- description
- type: completion | no_death | speedrun | collection | achievement | challenge_run | score_attack | time_trial
- difficulty: easy | medium | hard
- points
- estimated_time (в минутах)
- proof_type: screenshot | video | steam_achievement
- is_generated (boolean — создан AI или вручную)
- created_at
```

### Assignment (Задание — выпавшее участнику)

```
- id
- participant_id
- challenge_id
- status: active | completed | dropped
- proof_file (путь к файлу на сервере)
- proof_url (опционально — ссылка)
- proof_comment
- points_earned
- bet_amount
- started_at
- completed_at
```

### Event (Событие)

```
- id
- marathon_id
- type: golden_hour | common_enemy | double_risk | jackpot | swap | rematch
- start_time
- end_time
- is_active
- data (JSON — доп. данные события)
```

### Dispute (Оспаривание пруфа)

```
- id
- assignment_id
- raised_by (User)
- reason
- status: open | resolved_valid | resolved_invalid
- resolved_by (User — организатор или голосование)
- created_at
- resolved_at
```

---

## Уведомления (Telegram-бот)

### Типы уведомлений

- Марафон скоро начнётся
- Кто-то выполнил челлендж
- Тебя вызвали на челлендж
- Твой пруф оспорен
- Началось событие (Золотой час и т.д.)
- Напоминание: у тебя нет активного задания
- Марафон завершён — итоги

### Настройки

Пользователь может включить/выключить отдельные типы уведомлений.

---

## Технические решения

| Аспект | Решение |
|--------|---------|
| Авторизация | Логин/пароль |
| Хранение пруфов | Загрузка на сервер |
| Уведомления | Telegram-бот |
| Генерация челленджей | Интегрированное API нейросети |
| Формат марафона | 1 месяц (с перспективой других режимов) |

---

## Перспективы развития

### Дополнительные режимы марафонов

- **Sprint** (4-12 часов) — интенсивный формат
- **Daily Challenge** (1 неделя) — по 1-3 задания в день
- **Tournament** — несколько раундов, выбывание

### Дополнительные механики

- Колесо модификаторов (без звука, одной рукой, и т.д.)
- Командные марафоны (2v2, 3v3)
- Глобальная статистика и достижения пользователя
- Рейтинговая система игроков

---

## UI/UX — Основные экраны

1. **Главная** — список марафонов (активные, завершённые)
2. **Авторизация** — вход/регистрация
3. **Создание марафона** — форма с настройками
4. **Лобби марафона** — подготовка, добавление игр
5. **Колесо** — основной геймплей (спин игры → спин челленджа)
6. **Текущее задание** — детали + загрузка пруфа
7. **Лента активности** — действия всех участников
8. **Таблица лидеров** — рейтинг участников
9. **История заданий** — все выполненные/дропнутые
10. **Профиль** — настройки, статистика
