<?php

namespace App\Models\Scopes;

use App\Models\Role;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Support\Facades\Auth;

class OrganizerScope implements Scope
{
    /**
     * Apply the scope to a given Eloquent query builder.
     */
    public function apply(Builder $builder, Model $model): void
    {
        // El scope solo se aplica si estamos en un contexto de sesión/autenticado.
        // En CLI (artisan) o si no hay usuario, no filtramos (o podríamos filtrar si quisiéramos).
        if (app()->runningInConsole()) {
            return;
        }

        /** @var User|null $user */
        $user = Auth::user();

        if ($user === null) {
            return;
        }

        // Si es super admin o administrador, no aplicamos el filtro.
        if ($user->hasRole(Role::SLUG_SUPER_ADMIN) || $user->hasRole(Role::SLUG_ADMINISTRADOR)) {
            return;
        }

        $organizerId = $user->organizer?->id;

        // Si es un organizador, filtramos por su ID. 
        // Si por alguna razón no tiene organizador vinculado, bloqueamos el acceso.
        if ($organizerId) {
            $builder->where($model->getTable().'.organizer_id', $organizerId);
        } else {
            $builder->whereRaw('1 = 0');
        }
    }
}
