<?php

use App\Models\Permission;
use App\Models\Role;
use Illuminate\Database\Migrations\Migration;

return new class extends Migration
{
    public function up(): void
    {
        $names = ['complaints_view_own', 'complaints_create_own'];
        $permissionIds = [];

        foreach ($names as $name) {
            $permission = Permission::firstOrCreate(
                ['name' => $name],
                ['display_name' => ucfirst(str_replace('_', ' ', $name))]
            );
            $permissionIds[] = $permission->id;
        }

        Role::withoutGlobalScopes()
            ->where('name', 'employee')
            ->each(function (Role $role) use ($permissionIds): void {
                $role->permissions()->syncWithoutDetaching($permissionIds);
            });
    }

    public function down(): void
    {
        $permissionIds = Permission::query()
            ->whereIn('name', ['complaints_view_own', 'complaints_create_own'])
            ->pluck('id');

        if ($permissionIds->isEmpty()) {
            return;
        }

        Role::withoutGlobalScopes()
            ->where('name', 'employee')
            ->each(function (Role $role) use ($permissionIds): void {
                $role->permissions()->detach($permissionIds);
            });

        Permission::query()->whereIn('id', $permissionIds)->delete();
    }
};
