<?php

declare(strict_types=1);

use App\Services\Import\CsvLeadsParser;

// FN-ENC (приёмка 22.06.2026): один битый UTF-8-байт в CSV-выгрузке лидов ронял
// весь импорт на INSERT (PG: «invalid byte sequence for encoding UTF8»). str_getcsv
// пропускает любые байты, и невалидная последовательность доходила до БД. Контракт:
// парсер чистит невалидный UTF-8 — строка импортируется, очередь не падает.
test('parse чистит битый UTF-8 в текстовых полях — результат валидный UTF-8', function () {
    // Имя содержит одиночный байт 0xFF (невалидный UTF-8).
    $badName = "Имя\xFF";
    $csv = "id,Проект,Тег,Телефон,Создано,Напоминание,Комментарий,Состояние,Имя\n"
        ."1,Проект A,t1,79991234567,2026/01/01 10:00:00,,ок,Новый,{$badName}\n";

    $result = (new CsvLeadsParser)->parse($csv);

    expect($result->rows)->toHaveCount(1);
    $row = $result->rows[0];

    // Главное: всё, что уйдёт в INSERT, — валидный UTF-8 (иначе PG роняет джобу).
    expect(mb_check_encoding($row->contactName, 'UTF-8'))->toBeTrue();
    expect(mb_check_encoding($row->projectName, 'UTF-8'))->toBeTrue();
    // Кириллица-основа сохранена (битый байт убран, не вся строка).
    expect($row->contactName)->toContain('Имя');
});
