<?php

declare(strict_types=1);

namespace App\Services\Import;

/**
 * Маппинг русских названий статусов (старые 14 названий поставщика + новые 5)
 * в slug 5-статусной воронки (редизайн 2026-05-17).
 *
 * Чистый сервис без зависимостей. Tenant-специфичные переопределения
 * неизвестных статусов накладываются вызывающим кодом (HistoricalImportService).
 */
class StatusRuToSlugMapper
{
    /** @var array<string, string> Русские названия → 5 slug'ов воронки (редизайн 2026-05-17). */
    private const STATUS_RU_TO_SLUG = [
        // Новые названия 5-статусной воронки.
        'Новая сделка' => 'new',
        'Просмотрено' => 'viewed',
        'В работе' => 'in_progress',
        'Сделка' => 'won',
        'Не реализовано' => 'lost',
        // Старые 14 названий поставщика → новые slug'и (исторический CSV-импорт).
        'Новые' => 'new',
        'Проработан' => 'in_progress',
        'База' => 'in_progress',
        'Недозвон' => 'in_progress',
        'Переговоры' => 'in_progress',
        'Ожидаем оплаты' => 'in_progress',
        'Партнерка' => 'in_progress',
        'Оплачено' => 'won',
        'Закрыто и не реализовано' => 'lost',
        'Тест драйв' => 'in_progress',
        'Горячий' => 'in_progress',
        'На замену' => 'in_progress',
        'Конечный недозвон' => 'in_progress',
    ];

    /**
     * Возвращает slug или null, если статус не входит в каноническую таблицу.
     */
    public function toSlug(string $statusRu): ?string
    {
        return self::STATUS_RU_TO_SLUG[trim($statusRu)] ?? null;
    }

    /**
     * Полная таблица соответствия: русское название → slug 5-статусной воронки
     * (18 ключей — старые и новые названия схлопываются в 5 slug'ов).
     *
     * @return array<string, string>
     */
    public function map(): array
    {
        return self::STATUS_RU_TO_SLUG;
    }
}
