<?php

namespace App\Http\Middleware;

use App\Services\AuditLogger;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Al terminar la petición, registra acceso al panel (`/dashboard*`) para auditoría de uso.
 *
 * Los inicios/cierres de sesión y fallos de login se registran aparte vía eventos de Auth.
 */
// TODO(regiticket): Muestreo o cola si el volumen de GET hace crecer demasiado `audit_logs`.
class AuditHttpActivity
{
    public function handle(Request $request, Closure $next): Response
    {
        return $next($request);
    }

    public function terminate(Request $request, Response $response): void
    {
        if (! $request->user()) {
            return;
        }

        $path = ltrim($request->path(), '/');
        if ($path === '' || ! str_starts_with($path, 'dashboard')) {
            return;
        }

        if ($request->routeIs('dashboard.audit-logs.index')) {
            return;
        }

        try {
            app(AuditLogger::class)->recordDashboardRequest($request, $response->getStatusCode());
        } catch (\Throwable) {
            //
        }
    }
}
