<?php

namespace App\Http\Middleware;

use App\Support\Tenant;
use Closure;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

/**
 * Defensa en profundidad: verifica que cualquier modelo enlazado por route-model
 * binding pertenezca a la empresa actual. Aunque el global scope ya filtra,
 * esta capa protege contra ataques de IDOR si alguien desactiva el scope.
 */
class EnsureSameCompany
{
    public function handle(Request $request, Closure $next): Response
    {
        $tenantId = Tenant::id();

        if (! $tenantId) {
            return $next($request);
        }

        foreach ($request->route()?->parameters() ?? [] as $param) {
            if (! $param instanceof Model) {
                continue;
            }

            if (! array_key_exists('company_id', $param->getAttributes())) {
                continue;
            }

            if ((int) $param->company_id !== (int) $tenantId) {
                abort(404);
            }
        }

        return $next($request);
    }
}
