<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        // Verificar si ya existe el permiso
        $existe = DB::table('sys_permisos')
            ->where('permiso_codigo', 'CHECKLIST_CONFIGURAR')
            ->exists();

        if (!$existe) {
            // Insertar el permiso de configuración de checklist
            DB::table('sys_permisos')->insert([
                'modulo' => 'CHECKLIST',
                'permiso_codigo' => 'CHECKLIST_CONFIGURAR',
                'permiso_nombre' => 'Configurar Checklist',
                'permiso_descripcion' => 'Permite crear, editar y eliminar ítems del checklist de mantenimiento',
                'estado' => 1,
                'fecha_crea' => now(),
            ]);
        }

        // Obtener el ID del permiso
        $permisoId = DB::table('sys_permisos')
            ->where('permiso_codigo', 'CHECKLIST_CONFIGURAR')
            ->value('permiso_id');

        // Asignar el permiso a los roles SISTEMAS y ADMINISTRADOR
        $rolesAdmin = DB::table('sys_roles')
            ->whereIn('rol_codigo', ['SISTEMAS', 'ADMINISTRADOR', 'ADMIN'])
            ->pluck('rol_id');

        foreach ($rolesAdmin as $rolId) {
            // Verificar si ya existe la asignación
            $asignado = DB::table('sys_rol_permisos')
                ->where('rol_id', $rolId)
                ->where('permiso_id', $permisoId)
                ->exists();

            if (!$asignado) {
                DB::table('sys_rol_permisos')->insert([
                    'rol_id' => $rolId,
                    'permiso_id' => $permisoId,
                    'fecha_asignacion' => now(),
                ]);
            }
        }
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        // Obtener el ID del permiso
        $permisoId = DB::table('sys_permisos')
            ->where('permiso_codigo', 'CHECKLIST_CONFIGURAR')
            ->value('permiso_id');

        if ($permisoId) {
            // Eliminar las asignaciones de rol
            DB::table('sys_rol_permisos')
                ->where('permiso_id', $permisoId)
                ->delete();

            // Eliminar el permiso
            DB::table('sys_permisos')
                ->where('permiso_id', $permisoId)
                ->delete();
        }
    }
};
