# Руководство по тестированию N_Var функциональности

## Что было реализовано

### 1. N_Var = 0 (Режим решения задачи)
- ✅ Показывает только начальную позицию
- ✅ Отключает все кнопки навигации
- ✅ Включает обработку кликов по доске
- ✅ Проверяет клик против первого хода Variation 1
- ✅ Считает попытки (максимум 3)
- ✅ Показывает "Правильно!" при правильном ходе
- ✅ Показывает "Ошибка!" при неправильном ходе
- ✅ После 3 ошибок показывает правильный ход
- ✅ Автоматически показывает ответ противника (если следующий ход другого цвета)

### 2. N_Var = 1, 2, etc. (Показ вариации)
- ✅ Показывает ВСЕ ходы указанной вариации
- ✅ Включает навигацию по ходам
- ✅ Включает переключение между вариациями

### 3. Технические детали
- ✅ Добавлены атрибуты problem mode в DiagramViewerWindow
- ✅ Кнопки навигации сохранены как атрибуты для enable/disable
- ✅ Реализована конвертация координат canvas → board
- ✅ Реализованы методы:
  - `_enter_problem_mode()`
  - `_enter_variation_mode(n_var)`
  - `_on_canvas_click(event)`
  - `_handle_correct_move(move, var_moves)`
  - `_handle_wrong_move(var_moves)`
  - `_canvas_to_board_coords(x, y)`
  - `_show_opponent_response(move)`

## Как тестировать

### Подготовка
1. Запустить BIgo Reader: `python -m bigo_reader`
2. Открыть книгу (например, Книга 2 с украинским переводом)
3. Перейти на страницу с диаграммами

### Тест 1: N_Var = 0 (Problem Mode)
**Ожидаемое поведение:**
1. Кликнуть на диаграмму с N_Var = 0
2. Должна открыться только начальная позиция
3. Все кнопки навигации (<<, <, >, >>, Variant < >) должны быть отключены
4. Статус должен показывать: "Problem mode: Click to place stone. Attempts: 0/3"

**Действия:**
1. Кликнуть НЕ на правильную точку
   - Должен появиться messagebox "Ошибка!"
   - Статус: "Wrong! 2 attempts remaining"
2. Кликнуть снова неправильно
   - Messagebox "Ошибка!"
   - Статус: "Wrong! 1 attempts remaining"
3. Кликнуть третий раз неправильно
   - Messagebox "Ошибка!"
   - Messagebox "Попытки исчерпаны. Показан правильный ход."
   - На доске должен появиться камень с номером "1"

**Альтернативный сценарий (правильный ход):**
1. Кликнуть на ПРАВИЛЬНУЮ точку (первый ход Variation 1)
   - Messagebox "Правильно!"
   - Камень появляется с номером
   - Если следующий ход другого цвета → автоматически показывается ответ противника
   - Счётчик попыток сбрасывается
   - Переход к следующему ходу пользователя

### Тест 2: N_Var = 1 (Show Variation 1)
**Ожидаемое поведение:**
1. Кликнуть на диаграмму с N_Var = 1
2. Должны показаться ВСЕ ходы Variation 1 с номерами
3. Кнопки навигации (<<, <, >, >>) должны быть ВКЛЮЧЕНЫ
4. Можно листать ходы вперёд/назад
5. Статус: "Showing Variation 1 - X moves"

### Тест 3: N_Var = 2 (Show Variation 2)
**Аналогично тесту 2, но для Variation 2**

### Тест 4: Переключение между вариациями
1. Открыть диаграмму с N_Var = 1
2. Использовать кнопки "< >" для переключения между вариациями
3. Проверить, что загружается правильная вариация

## База данных

### PostgreSQL
- Таблица: `books_schema.page_diagram_links`
- Колонка: `n_var` (integer)

### SQLite
- Таблица: `page_diagram_links`
- Колонка: `diagram_variant` (integer)

**Примечание:** Код использует `get_diagram_variant_column()` для автоматического выбора правильной колонки.

## Логирование

Все действия логируются в LOGGER:
- "Entering problem solving mode (N_Var = 0)"
- "Entering variation display mode (N_Var = X)"
- "Canvas clicked at (x, y)"
- "Converted to board coordinates: (x, y)"
- "Expected move: (x, y), User clicked: (x, y)"
- "Correct move!" / "Wrong move!"
- "Problem fully solved!"

Смотрите логи в консоли для отладки.

## Известные ограничения

### Пункт (б) - НЕ реализован
**Требование:** При переходе к варианту в problem mode нужно:
- Стирать номера на камнях из Main Line
- Начинать вариант с хода 1

**Статус:** Требует доработки. Сейчас:
- В problem mode показывается только setup (без Main Line)
- Нумерация вариантов идёт с 1

Это требование нужно уточнить:
- Когда именно показывать Main Line ходы?
- Как отличить Main Line от вариантов в SGF?

## Возможные улучшения

1. **Визуальная обратная связь:** Вместо messagebox использовать:
   - Цветную подсветку статус-бара
   - Анимацию камня
   - Звуковые эффекты

2. **Настройки:** Добавить в config:
   - `problem_max_attempts` (сейчас = 3)
   - `auto_show_opponent` (сейчас = True)

3. **Статистика:** Сохранять:
   - Количество попыток на решение
   - Время решения
   - Процент правильных ходов

4. **Подсказки:**
   - Показать область возможных ходов
   - Показать количество вариантов
   - Режим "обучение" с подсказками

## Файлы изменены

- `bigo_reader/diagrams/diagram_viewer.py` - основная реализация
- `bigo_reader/NVAR_IMPLEMENTATION_PLAN.md` - план реализации
- `bigo_reader/NVAR_TESTING_GUIDE.md` - это руководство

## Статус

- ✅ N_Var = 0 (Problem mode) - реализовано
- ✅ N_Var = 1,2,etc (Variation display) - реализовано
- ✅ Click handling - реализовано
- ✅ Attempts tracking - реализовано
- ✅ Auto-show opponent - реализовано
- ❌ Main line support (пункт б) - не реализовано (требует уточнения)
- ⏳ Тестирование - в процессе
