# План реалізації: Підтримка IPv6 (Заміна surge-ping на ping-async)

## Огляд
Згідно з проведеним дослідженням, поточна бібліотека `surge-ping` не має повної підтримки протоколу IPv6. Крім того, на ОС Windows для виконання пінгу періодично можуть виникати проблеми з привілеями. 
Мета цього плану — замінити `surge-ping` на сучаснішу бібліотеку `ping-async`, що забезпечить повноцінну підтримку IPv4/IPv6 та покращить роботу на Windows завдяки використанню нативних API без вимог прав адміністратора.

## Зміни в архітектурі
1. **Залежності (`Cargo.toml`)**: Відбудеться заміна крейта `surge-ping` на `ping-async`.
2. **Логіка моніторингу (`src/logic/pinger.rs`)**: 
   - Заміна функції виконання ICMP-запиту. Замість вільного виклику `surge_ping::ping` використовуватиметься клієнтський об'єкт або функція з `ping-async` (наприклад, `IcmpEchoRequestor`).
   - Буде адаптовано механізм передачі випадково згенерованого Payload (корисного навантаження) для збереження функціоналу `random_padding`.
3. **Резолвінг (`src/logic/pinger.rs`)**: Механізм `tokio::net::lookup_host` уже зараз здатен віддавати IPv6-адреси. Ми забезпечимо, щоб ці адреси коректно передавалися в новий модуль пінгу.

## Етапи реалізації

### 1. Оновлення залежностей
- [x] Виконати команду `cargo remove surge-ping`.
- [x] Виконати команду `cargo add ping-async`.
- [x] Очистити кеш або виконати тестову збірку для перевірки наявності бібліотеки.

### 2. Рефакторинг коду (`src/logic/pinger.rs`)
- [x] Дослідити документацію нового крейту `ping-async` безпосередньо в коді.
- [x] Змінити задачу `pinger_task`:
  - Налаштувати створення екземпляру `IcmpEchoRequestor` (або аналогічного).
  - Адаптувати таймаут для нового API.
  - **Примітка**: Бібліотека `ping-async` (версія 1.0.2) наразі використовує фіксований розмір корисного навантаження (timestamp) для розрахунку RTT. Це тимчасово обмежує функціонал `random_padding`.
- [x] Перевірити обробку помилок.

### 3. Тестування та валідація
- [x] Запустити існуючі Unit-тести (`cargo test`).
- [x] Додати або розширити тести в `src/logic/pinger_tests.rs`.
- [x] Запустити GUI-версію програми та перевірити IPv6 пінг.

### 4. Оновлення документації
- [x] Оновити `TODO.md`.
- [x] Додати згадку про повну підтримку IPv6 до `README.md`.

## Критерії успіху
1. Проєкт компілюється успішно (`cargo build --all-targets`).
2. Усі тести (`cargo test`) проходять.
3. Користувач може візуально спостерігати успішні графіки як для IPv4 (`8.8.8.8`), так і для IPv6 (`2001:4860:4860::8888`).
4. Збережено старий функціонал генерації випадкових розмірів пакетів та jitter.
