
// Donmuş (frozen) mail otomatik temizlik — OPT-IN (server_settings.mail_queue_purge_frozen_enabled='1').
// Eşik server_settings.mail_queue_purge_frozen_hours (varsayılan 48 saat). Teslim edilemeyen,
// kendiliğinden YENİDEN DENENMEYEN frozen mailleri kuyruktan düşürür (yalnız Exim'de anlamlı;
// Postfix frozen tutmaz → service no-op). Silinen sayı audit_log'a yazılır. 04:40 — diğer 04:30
// retention/backup cron'larından sonra, off-peak. Kapalıyken (varsayılan) hiçbir şey silmez.
Schedule::call(function (): void {
    try {
        $enabled = \Illuminate\Support\Facades\DB::table('server_settings')
            ->where('key', 'mail_queue_purge_frozen_enabled')->value('value');
        if ((string) $enabled !== '1') {
            return; // opt-in kapalı
        }

        $hours = (int) (\Illuminate\Support\Facades\DB::table('server_settings')
            ->where('key', 'mail_queue_purge_frozen_hours')->value('value') ?: 48);
        $hours = max(1, $hours);

        $svc = app(\App\Domain\Mail\Services\MailQueueService::class);
        $driver = $svc->activeDriver();
        $res = $svc->purgeFrozen($driver, $hours, false);

        if ((int) ($res['purged'] ?? 0) > 0) {
            \Illuminate\Support\Facades\Log::info('mail.queue.autopurge_frozen', [
                'driver' => $driver, 'hours' => $hours,
                'matched' => $res['matched'] ?? 0, 'purged' => $res['purged'] ?? 0,
            ]);
            try {
                \Illuminate\Support\Facades\DB::table('audit_log')->insert([
                    'user_id' => null,
                    'action' => 'mail.queue.autopurge_frozen',
                    'target_type' => 'mail_queue',
                    'target_id' => null,
                    'outcome' => 'success',
                    'error_message' => null,
                    'metadata' => json_encode([
                        'driver' => $driver, 'hours' => $hours,
                        'matched' => $res['matched'] ?? 0, 'purged' => $res['purged'] ?? 0,
                    ], JSON_UNESCAPED_UNICODE),
                    'created_at' => now(),
                ]);
            } catch (\Throwable $e) {
                \Illuminate\Support\Facades\Log::warning('mail.queue.autopurge_audit_failed', ['err' => $e->getMessage()]);
            }
        }
    } catch (\Throwable $e) {
        \Illuminate\Support\Facades\Log::warning('mail.queue.autopurge_frozen_failed', ['error' => $e->getMessage()]);
    }
})
    ->dailyAt('04:40')
    ->name('onox:mail-purge-frozen')
    ->withoutOverlapping(30)
    ->runInBackground();
