<?php

declare(strict_types=1);

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

/**
 * Delete artwork_view_events rows older than N days.
 *
 * The view event log grows ~proportionally to site traffic. Rows beyond the
 * retention window are no longer useful for trending (which looks back ≤7
 * days) or for computing "recently viewed" lists in the UI.
 *
 * Default retention is 90 days — long enough for analytics queries and user
 * history pages, short enough to keep the table from growing unbounded.
 *
 * Usage:
 *   php artisan skinbase:prune-view-events
 *   php artisan skinbase:prune-view-events --days=30
 */
class PruneViewEventsCommand extends Command
{
    protected $signature   = 'skinbase:prune-view-events {--days=90 : Delete events older than this many days}';
    protected $description = 'Delete artwork_view_events rows older than N days';

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

        $deleted = DB::table('artwork_view_events')
            ->where('viewed_at', '<', $cutoff)
            ->delete();

        $this->info("Pruned {$deleted} view event(s) older than {$days} days (cutoff: {$cutoff}).");

        return self::SUCCESS;
    }
}
