<?php

namespace App\Console\Commands;

use App\Models\JobApplication;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;

class PurgeOldApplications extends Command
{
    /**
     * KVKK gereği 90 günden eski başvuruları anonimleştirir ve CV dosyalarını siler.
     */
    protected $signature = 'kvkk:purge-old-applications
                            {--days=90 : Kaç günden eski başvurular silinsin}
                            {--dry-run : Gerçekten silmeden kaç kayıt etkileneceğini göster}';

    protected $description = 'KVKK gereği belirtilen günden eski başvuruların kişisel verilerini siler/anonimleştirir';

    public function handle(): int
    {
        $days    = (int) $this->option('days');
        $dryRun  = $this->option('dry-run');
        $cutoff  = now()->subDays($days);

        $query = JobApplication::where('created_at', '<', $cutoff)
            ->whereNull('purged_at');

        $count = $query->count();

        if ($count === 0) {
            $this->info("Silinecek eski başvuru bulunamadı ({$days} günden eski).");
            return self::SUCCESS;
        }

        if ($dryRun) {
            $this->warn("[DRY-RUN] {$count} başvuru etkilenecek (gerçek silme yapılmadı).");
            return self::SUCCESS;
        }

        $this->info("{$count} başvurunun kişisel verileri temizleniyor...");

        $query->chunkById(100, function ($applications) {
            foreach ($applications as $application) {
                // CV dosyasını sil
                if ($application->cv_path && Storage::disk('local')->exists($application->cv_path)) {
                    Storage::disk('local')->delete($application->cv_path);
                }

                // Kişisel verileri anonimleştir, başvuru kaydını koru (istatistik için)
                $application->update([
                    'full_name'        => 'Silindi',
                    'email'            => 'silindi_' . $application->id . '@kvkk.local',
                    'phone'            => null,
                    'cover_letter'     => null,
                    'cv_path'          => null,
                    'cv_original_name' => null,
                    'linkedin_url'     => null,
                    'internal_notes'   => null,
                    'kvkk_consent_ip'  => null,
                    'purged_at'        => now(),
                ]);
            }
        });

        $this->info("✓ {$count} başvurunun kişisel verileri KVKK gereği temizlendi.");

        return self::SUCCESS;
    }
}