<?php
require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();

use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
use App\Models\User;

echo "Buscando permisos mal formados 'proveedors'...\n";
$old = Permission::where('name', 'like', '%proveedors%')->get();
if ($old->isEmpty()) {
    echo "No se encontraron permisos con 'proveedors'.\n";
    exit(0);
}

foreach ($old as $perm) {
    $newName = str_replace('proveedors', 'proveedores', $perm->name);

    $new = Permission::firstOrCreate(['name' => $newName]);

    // Re-asignar a roles que tenían el permiso antiguo
    $roles = $perm->roles;
    foreach ($roles as $role) {
        $role->givePermissionTo($new);
        $role->revokePermissionTo($perm);
        echo "Rol '{$role->name}': reemplazado '{$perm->name}' por '{$newName}'\n";
    }

    // Re-asignar a usuarios que tenían el permiso antiguo (a través de direct assign)
    $users = $perm->users ?? null; // spatie relationship may not be set on model depending on config
    if ($users) {
        foreach ($users as $user) {
            $user->givePermissionTo($new);
            $user->revokePermissionTo($perm);
            echo "Usuario '{$user->email}': reemplazado permiso '{$perm->name}' por '{$newName}'\n";
        }
    }

    // Finalmente eliminar el permiso antiguo
    $perm->delete();
    echo "Permiso antiguo '{$perm->name}' eliminado.\n";
}

// Asegurar que el rol Administrador tenga el permiso nuevo
$role = Role::firstWhere('name', 'Administrador');
if ($role) {
    if (! $role->hasPermissionTo('ver proveedores')) {
        $role->givePermissionTo('ver proveedores');
        echo "Rol 'Administrador' ahora tiene 'ver proveedores'.\n";
    }
}

// Asegurar que el usuario tenga el permiso
$user = User::where('email', 'info@creacionesheidivers.com')->first();
if ($user) {
    $has = $user->can('ver proveedores');
    echo "Usuario '{$user->email}' puede 'ver proveedores'?: " . ($has ? 'si' : 'no') . "\n";
    if (! $has) {
        $user->givePermissionTo('ver proveedores');
        echo "Asignado permiso 'ver proveedores' al usuario.\n";
    }
}

echo "Listo.\n";