# Main Line Support для N_Var=0 - РЕАЛИЗОВАНО ✅

## Что добавлено (пункт б)

### 1. Показ Main Line с номерами при входе в Problem Mode

**Метод:** `_enter_problem_mode()`
- Теперь показывает все Main Line ходы **С номерами**
- `self.current_move = len(self.moves)` - показываем все ходы
- Статус: "Problem mode: Main line shown (X moves). Click to solve."

### 2. Стирание номеров Main Line при первом клике

**Метод:** `_handle_correct_move()` и `_handle_wrong_move()`
- Проверка флага `self.problem_showing_main_line` перед первым ходом
- Вызов `_rebuild_board_without_main_line_numbers()`
- Установка флага `self.problem_showing_main_line = False`

**Новый метод:** `_rebuild_board_without_main_line_numbers()`
```python
def _rebuild_board_without_main_line_numbers(self):
    """Rebuild board with main line stones but without numbers."""
    # Recreate board
    # Place setup stones (AB[], AW[])
    # Place markups (initial labels)
    # Place main line moves WITHOUT numbers
    # Render
```

### 3. Кнопка Reset для возврата к Main Line

**Новая кнопка:** "Reset"
- Создаётся в `_build_ui()`
- Показывается только в problem mode
- Скрыта по умолчанию: `self.btn_reset_problem.pack_forget()`
- Показывается в `_enter_problem_mode()`: `self.btn_reset_problem.pack()`

**Новый метод:** `_reset_problem()`
```python
def _reset_problem(self):
    """Reset problem to initial state with main line shown."""
    # Reset counters
    self.problem_attempts = 0
    self.problem_current_move = 0
    self.problem_solved = False
    self.problem_showing_main_line = True
    
    # Show Main Line WITH numbers
    self.current_move = len(self.moves)
    self._update_board_to_move(self.current_move)
```

### 4. Новый атрибут

**В `__init__`:**
```python
self.problem_showing_main_line: bool = True  # Track if showing main line or variation
```

## Логика работы

### Сценарий 1: Правильный первый клик
1. Открывается диаграмма с N_Var=0
2. Показывается Main Line с номерами 1,2,3...
3. Пользователь кликает на ПРАВИЛЬНУЮ точку
4. **Номера стираются** (`_rebuild_board_without_main_line_numbers()`)
5. Показывается ход пользователя с номером "1"
6. Нумерация вариации начинается с 1

### Сценарий 2: Неправильный клик
1. Открывается диаграмма с N_Var=0
2. Показывается Main Line с номерами
3. Пользователь кликает НЕПРАВИЛЬНО 3 раза
4. **Номера стираются** перед показом решения
5. Показывается правильный ход с номером "1"

### Сценарий 3: Reset
1. Пользователь начал решать задачу (номера Main Line стёрты)
2. Кликает кнопку "Reset"
3. **Main Line показывается снова с номерами**
4. Счётчики попыток обнуляются
5. Можно начать решать заново

## Изменённые методы

1. **`_enter_problem_mode()`**
   - Добавлен флаг `problem_showing_main_line = True`
   - Показ Main Line с номерами: `self.current_move = len(self.moves)`
   - Показ кнопки Reset: `self.btn_reset_problem.pack()`

2. **`_handle_correct_move()`**
   - Проверка флага перед первым ходом
   - Вызов `_rebuild_board_without_main_line_numbers()`

3. **`_handle_wrong_move()`**
   - Проверка флага при exhausted attempts
   - Вызов `_rebuild_board_without_main_line_numbers()`

## Новые методы

1. **`_rebuild_board_without_main_line_numbers()`**
   - Пересоздаёт доску
   - Размещает setup stones
   - Размещает initial markups
   - Размещает Main Line ходы БЕЗ номеров

2. **`_reset_problem()`**
   - Сбрасывает счётчики
   - Возвращает Main Line с номерами
   - Обновляет статус

## Тестирование

### Тест 1: Main Line показывается с номерами
1. Открыть диаграмму с N_Var=0
2. ✅ Должны быть видны Main Line ходы с номерами
3. ✅ Статус: "Problem mode: Main line shown (X moves). Click to solve."
4. ✅ Кнопка "Reset" видна

### Тест 2: Номера стираются при правильном клике
1. Кликнуть на правильную точку (первый ход Variation 1)
2. ✅ Messagebox "Правильно!"
3. ✅ Main Line номера исчезли
4. ✅ Ход пользователя показан с номером "1"

### Тест 3: Номера стираются при показе решения
1. Кликнуть неправильно 3 раза
2. ✅ Main Line номера исчезли
3. ✅ Правильный ход показан с номером "1"

### Тест 4: Reset возвращает Main Line
1. Начать решать задачу (номера стёрты)
2. Кликнуть "Reset"
3. ✅ Main Line номера вернулись
4. ✅ Счётчики обнулились
5. ✅ Статус: "Problem mode: Main line shown..."

## Статус

- ✅ Main Line показывается с номерами
- ✅ Номера стираются при первом клике
- ✅ Вариант нумеруется с 1
- ✅ Кнопка Reset добавлена
- ✅ Reset восстанавливает Main Line с номерами
- ⏳ Тестирование

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

- `bigo_reader/diagrams/diagram_viewer.py`
  - Добавлен атрибут: `problem_showing_main_line`
  - Изменён метод: `_enter_problem_mode()`
  - Изменён метод: `_handle_correct_move()`
  - Изменён метод: `_handle_wrong_move()`
  - Новый метод: `_rebuild_board_without_main_line_numbers()`
  - Новый метод: `_reset_problem()`
  - Новая кнопка: `btn_reset_problem`
