<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use App\Models\User;

class RolesPermissionsSeeder extends Seeder
{
    public function run(): void
    {
        app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();

        $permisos = [
            'solicitud.crear',
            'solicitud.ver',
            'solicitud.evaluar',
            'solicitud.cambiar-estado',
            'solicitud.desembolsar',
            'solicitud.ver-todos',
            'informe.enviar',
            'informe.revisar',
            'documento.subir',
            'documento.descargar',
            'admin.dashboard',
        ];

        foreach ($permisos as $p) {
            Permission::firstOrCreate(['name' => $p, 'guard_name' => 'web']);
        }

        $asociado = Role::firstOrCreate(['name' => 'asociado', 'guard_name' => 'web']);
        $asociado->syncPermissions(['solicitud.crear', 'solicitud.ver', 'informe.enviar', 'documento.subir']);

        $evaluador = Role::firstOrCreate(['name' => 'evaluador', 'guard_name' => 'web']);
        $evaluador->syncPermissions(['solicitud.ver', 'solicitud.ver-todos', 'solicitud.evaluar', 'documento.descargar', 'informe.revisar']);

        $junta = Role::firstOrCreate(['name' => 'junta', 'guard_name' => 'web']);
        $junta->syncPermissions(['solicitud.ver-todos', 'solicitud.cambiar-estado']);

        $admin = Role::firstOrCreate(['name' => 'admin', 'guard_name' => 'web']);
        $admin->syncPermissions(Permission::all());

        // Usuario admin por defecto
        $adminPassword = env('ADMIN_PASSWORD', Str::random(16));
        $adminUser = User::firstOrCreate(
            ['email' => env('ADMIN_EMAIL', 'admin@fempha.com.co')],
            [
                'name'             => 'Administrador FEMPHA',
                'password'         => bcrypt($adminPassword),
                'numero_asociado'  => 'ADM-001',
                'email_verified_at'=> now(),
            ]
        );
        $adminUser->assignRole('admin');

        $this->command->info('Roles y permisos creados.');
        $this->command->info('Admin email: ' . env('ADMIN_EMAIL', 'admin@fempha.com.co'));
        if (!env('ADMIN_PASSWORD')) {
            $this->command->warn('Contraseña generada automáticamente: ' . $adminPassword);
            $this->command->warn('Guárdala ahora — no se volverá a mostrar.');
        }
    }
}
