<?php

namespace App\Policies;

use App\Models\Area;
use App\Models\User;
use App\Support\AreaPermission;

/**
 * Autorización por área para modelos Area (operar vs solo ver).
 * Configuración global de áreas (update/delete): solo administración.
 */
class AreaPolicy
{
    public function viewAny(User $user): bool
    {
        return $user->hasRole(['Administrador', 'Operador', 'Recepcionista']);
    }

    public function operate(User $user, Area $area): bool
    {
        return AreaPermission::canOperate($user, $area);
    }

    public function view(User $user, Area $area): bool
    {
        return AreaPermission::canView($user, $area);
    }

    public function create(User $user): bool
    {
        return $user->hasRole('Administrador') && $user->can('administracion.areas');
    }

    public function update(User $user, Area $area): bool
    {
        return $user->hasRole('Administrador') && $user->can('administracion.areas');
    }

    public function delete(User $user, Area $area): bool
    {
        return $user->hasRole('Administrador') && $user->can('administracion.areas');
    }

    /**
     * Crear áreas o alterar sort_order / flags de negocio (futuro CRUD de áreas).
     */
    public function manageConfiguration(User $user): bool
    {
        return $user->hasRole('Administrador') && $user->can('administracion.areas');
    }
}
