<?php

namespace App\Console\Commands;

use App\Models\Submission;
use App\Models\AuditLog;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;

class RgpdCleanup extends Command
{
    protected $signature = 'rgpd:cleanup';
    protected $description = 'Apagar dados pessoais de submissoes com mais de 12 meses (retencao RGPD)';

    public function handle(): int
    {
        $months = config('services.rgpd.retention_months', 12);
        $cutoff = now()->subMonths($months);

        // Excluir registos ja sincronizados pelo develop (serao purgados por la)
        $submissions = Submission::where('created_at', '<', $cutoff)
            ->whereNotNull('email')
            ->whereNull('synced_at')
            ->get();

        $count = 0;

        foreach ($submissions as $submission) {
            if ($submission->comprovativo_path) {
                try {
                    Storage::disk('r2')->delete($submission->comprovativo_path);
                } catch (\Exception $e) {
                    $this->warn("Falha ao apagar ficheiro: {$submission->comprovativo_path}");
                }
            }

            $submission->update([
                'nome_completo' => '[ANONIMIZADO]',
                'email' => null,
                'telemovel' => null,
                'contacto_emergencia_nome' => null,
                'contacto_emergencia_relacao' => null,
                'contacto_emergencia_telefone' => null,
                'morada_original' => null,
                'morada_corrigida' => null,
                'comprovativo_path' => null,
                'comprovativo_original_name' => null,
                'comprovativo_mime' => null,
                'comprovativo_size' => null,
                'ip_address' => null,
                'user_agent' => null,
                'diff_data' => null,
            ]);

            $count++;
        }

        AuditLog::log('rgpd_cleanup', null, null, null, null, [
            'records_anonymized' => $count,
            'cutoff_date' => $cutoff->toDateString(),
        ]);

        $this->info("RGPD cleanup: {$count} submissoes anonimizadas.");
        return 0;
    }
}
