<?php

namespace App\Support;

/**
 * PRC-617 — Bir e-posta template adını client iletişim tercihi kategorisine eşler.
 * Kategoriler: exempt (auth/güvenlik — daima gönder), invoice, service,
 * marketing (consent ayrı), general (yalnız master gate'ler).
 *
 * Sıralama önemli: marketing > explicit map > exempt > invoice > service > general.
 */
class NotificationCategoryResolver
{
    /** Template adı → kategori override'ları (keyword'ün yanlış sınıfladığı durumlar). */
    private array $map = [
        // örn. 'Client Welcome Email' => 'service',
        // PRC-771 — yeni konumdan giriş güvenlik bildirimi: master email
        // opt-out'unu bypass etmeli (kendi `notify_login_new_location`
        // toggle'ı tetik noktasında zaten kontrol ediliyor).
        'New Login Location' => 'exempt',
    ];

    public function resolve(string $templateName, ?string $messageClass = null): string
    {
        if ($messageClass === 'marketing') {
            return 'marketing';
        }

        if (isset($this->map[$templateName])) {
            return $this->map[$templateName];
        }

        $n = $templateName;

        if (preg_match('/password|verif|doğrula|two.?factor|security|account access|authorization/i', $n)) {
            return 'exempt';
        }

        if (preg_match('/invoice|fatura|overdue|payment\s*(confirmation|received|failed|pending|due|overdue|reversed)/i', $n)) {
            return 'invoice';
        }

        if (preg_match('/service|domain|product[_ ]?change|provision|trial|setup|suspend|terminate|renew|cancellation|contract/i', $n)) {
            return 'service';
        }

        return 'general';
    }
}
