<?php

namespace App\Policies\Concerns;

use App\Models\User;

/**
 * Policy de "solo super_admin" para recursos de plataforma.
 *
 * Declara TODAS las abilities explícitamente a propósito: Laravel omite la policy
 * (y por tanto su `before`) cuando el método de la ability no existe — el chequeo
 * `is_callable([$policy, $method])` en `resolvePolicyCallback` corre ANTES del
 * `before`. Una policy con solo `before` NO gatea nada → cae a deny para todos
 * (incluido el super_admin). De ahí que cada ability tenga su método. (#124)
 */
trait SuperAdminOnly
{
    public function viewAny(User $user): bool
    {
        return $user->isSuperAdmin();
    }

    public function view(User $user, $record): bool
    {
        return $user->isSuperAdmin();
    }

    public function create(User $user): bool
    {
        return $user->isSuperAdmin();
    }

    public function update(User $user, $record): bool
    {
        return $user->isSuperAdmin();
    }

    public function delete(User $user, $record): bool
    {
        return $user->isSuperAdmin();
    }

    public function deleteAny(User $user): bool
    {
        return $user->isSuperAdmin();
    }

    public function restore(User $user, $record): bool
    {
        return $user->isSuperAdmin();
    }

    public function forceDelete(User $user, $record): bool
    {
        return $user->isSuperAdmin();
    }
}
