<?php

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

return new class extends Migration
{
    public function up(): void
    {
        if (! DB::getSchemaBuilder()->hasTable('roles') || ! DB::getSchemaBuilder()->hasTable('rol_modulo_permisos')) {
            return;
        }

        $roles = DB::table('roles')->get(['id_rol', 'slug']);
        foreach ($roles as $rol) {
            $exists = DB::table('rol_modulo_permisos')
                ->where('id_rol', $rol->id_rol)
                ->where('modulo', 'instituciones-padre')
                ->exists();
            if ($exists) {
                continue;
            }

            $defaults = [
                'puede_ver' => false,
                'puede_agregar' => false,
                'puede_editar' => false,
                'puede_eliminar' => false,
            ];

            $slug = trim((string) ($rol->slug ?? ''));
            if ($slug === 'administrador') {
                $defaults = [
                    'puede_ver' => true,
                    'puede_agregar' => true,
                    'puede_editar' => true,
                    'puede_eliminar' => true,
                ];
            } elseif ($slug === 'editor') {
                $defaults = [
                    'puede_ver' => true,
                    'puede_agregar' => true,
                    'puede_editar' => true,
                    'puede_eliminar' => false,
                ];
            } elseif ($slug === 'visor') {
                $defaults = [
                    'puede_ver' => true,
                    'puede_agregar' => false,
                    'puede_editar' => false,
                    'puede_eliminar' => false,
                ];
            }

            DB::table('rol_modulo_permisos')->insert([
                'id_rol' => $rol->id_rol,
                'modulo' => 'instituciones-padre',
                'puede_ver' => $defaults['puede_ver'],
                'puede_agregar' => $defaults['puede_agregar'],
                'puede_editar' => $defaults['puede_editar'],
                'puede_eliminar' => $defaults['puede_eliminar'],
            ]);
        }
    }

    public function down(): void
    {
        if (! DB::getSchemaBuilder()->hasTable('rol_modulo_permisos')) {
            return;
        }

        DB::table('rol_modulo_permisos')->where('modulo', 'instituciones-padre')->delete();
    }
};

