<?php

use App\Models\Permission;
use App\Models\Role;
use Illuminate\Database\Migrations\Migration;

return new class extends Migration
{
    public function up(): void
    {
        $permission = Permission::firstOrCreate(
            ['name' => 'attendances_approve_regularization'],
            ['display_name' => 'Attendances approve regularization']
        );

        Role::withoutGlobalScopes()
            ->whereIn('name', ['admin', 'hr', 'manager'])
            ->each(function (Role $role) use ($permission): void {
                $role->permissions()->syncWithoutDetaching([(int) $permission->id]);
            });
    }

    public function down(): void
    {
        $permissionId = Permission::query()
            ->where('name', 'attendances_approve_regularization')
            ->value('id');

        if (! $permissionId) {
            return;
        }

        Role::withoutGlobalScopes()
            ->whereIn('name', ['admin', 'hr', 'manager'])
            ->each(function (Role $role) use ($permissionId): void {
                $role->permissions()->detach($permissionId);
            });

        Permission::query()->where('id', $permissionId)->delete();
    }
};
