<?php

namespace App\Console\Commands;

use App\Models\AuditLog;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

/**
 * هر شب اجرا می‌شود (طبق routes/console.php این فاز). فقط داده‌ی کم‌ارزش و قدیمی
 * پاک می‌شود — Assessment، Workout/Nutrition Plan، Payment هرگز اینجا لمس نمی‌شوند
 * (طبق بند ۴۴؛ تصمیم در docs/architecture-addendum.md فاز ۱۴).
 */
class PruneOldData extends Command
{
    protected $signature = 'app:prune-old-data';

    protected $description = 'پاک‌سازی خودکار Session های منقضی و AuditLog های خیلی قدیمی';

    public function handle(): int
    {
        // Sessionهای منقضی (بیش از ۳۰ روز بدون فعالیت) — جدول sessions از Phase 1
        $sessionCutoff = now()->subDays(30)->getTimestamp();
        $deletedSessions = DB::table('sessions')->where('last_activity', '<', $sessionCutoff)->delete();
        $this->info("Session های منقضی حذف‌شده: {$deletedSessions}");

        // AuditLog های بیش از ۱۲ ماه — طبق بند ۳۸، لاگ برای پیگیری امنیتی کوتاه‌مدت است،
        // نه یک آرشیو ابدی؛ ۱۲ ماه فرصت کافی برای بررسی هر اختلاف احتمالی می‌دهد.
        $logCutoff = now()->subMonths(12);
        $deletedLogs = AuditLog::query()->where('created_at', '<', $logCutoff)->delete();
        $this->info("AuditLog های قدیمی حذف‌شده: {$deletedLogs}");

        return self::SUCCESS;
    }
}
