<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;

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

        $permisos = [
            // Usuarios
            'usuarios.ver', 'usuarios.crear', 'usuarios.editar', 'usuarios.eliminar',
            'roles.ver', 'roles.gestionar',
            // Catalogos
            'catalogos.ver', 'catalogos.gestionar',
            'areas.ver', 'areas.gestionar',
            'sistemas.ver', 'sistemas.gestionar',
            'equipos.ver', 'equipos.gestionar',
            'componentes.ver', 'componentes.gestionar',
            // Planes
            'planes.ver', 'planes.crear', 'planes.editar', 'planes.eliminar', 'planes.exportar',
            // Programacion
            'programacion.ver', 'programacion.generar',
            // Ordenes
            'ordenes.ver', 'ordenes.crear', 'ordenes.editar', 'ordenes.eliminar',
            'ordenes.aprobar', 'ordenes.cerrar', 'ordenes.reprogramar', 'ordenes.exportar',
            'ordenes.ejecutar',
            // Inventario
            'repuestos.ver', 'repuestos.gestionar', 'inventario.movimientos',
            // Importacion
            'importar.excel',
            // Reportes
            'reportes.ver', 'reportes.exportar',
            // Configuracion
            'configuracion.ver', 'configuracion.editar',
            // API
            'api.usar',
            // Auditoria
            'auditoria.ver',
        ];

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

        $roles = [
            'Administrador' => $permisos,
            'Supervisor' => [
                'usuarios.ver', 'catalogos.ver', 'areas.ver', 'sistemas.ver', 'equipos.ver', 'componentes.ver',
                'planes.ver', 'planes.crear', 'planes.editar', 'planes.exportar',
                'programacion.ver', 'programacion.generar',
                'ordenes.ver', 'ordenes.crear', 'ordenes.editar', 'ordenes.aprobar', 'ordenes.cerrar', 'ordenes.reprogramar', 'ordenes.exportar',
                'repuestos.ver', 'inventario.movimientos',
                'reportes.ver', 'reportes.exportar',
            ],
            'Tecnico' => [
                'ordenes.ver', 'ordenes.ejecutar',
                'equipos.ver', 'componentes.ver',
                'repuestos.ver',
            ],
            'Almacen' => [
                'repuestos.ver', 'repuestos.gestionar', 'inventario.movimientos',
                'ordenes.ver', 'reportes.ver',
            ],
            'Consulta' => [
                'reportes.ver', 'ordenes.ver', 'planes.ver', 'equipos.ver', 'areas.ver',
            ],
        ];

        foreach ($roles as $nombre => $perm) {
            $rol = Role::firstOrCreate(['name' => $nombre, 'guard_name' => 'web']);
            $rol->syncPermissions($perm);
        }
    }
}
