<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Spatie\Permission\PermissionRegistrar;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        $tableNames = config('permission.table_names');
        $permissionsTable = $tableNames['permissions'] ?? 'permissions';

        if (! Schema::hasTable($permissionsTable)) {
            return;
        }

        $now = now();
        $permissions = [
            'products.restock',
            'stock-audit.view',
            'stock-audit.create',
            'stock-adjustments.manage',
            'stock-adjustments.view',
            'reports.stock-audit',
            'reports.stock-adjustments',
        ];

        DB::table($permissionsTable)->insertOrIgnore(
            array_map(
                fn (string $name) => [
                    'name' => $name,
                    'guard_name' => 'web',
                    'created_at' => $now,
                    'updated_at' => $now,
                ],
                $permissions
            )
        );

        app(PermissionRegistrar::class)->forgetCachedPermissions();
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        $tableNames = config('permission.table_names');
        $permissionsTable = $tableNames['permissions'] ?? 'permissions';

        if (! Schema::hasTable($permissionsTable)) {
            return;
        }

        DB::table($permissionsTable)
            ->where('guard_name', 'web')
            ->whereIn('name', [
                'products.restock',
                'stock-audit.view',
                'stock-audit.create',
                'stock-adjustments.manage',
                'stock-adjustments.view',
                'reports.stock-audit',
                'reports.stock-adjustments',
            ])
            ->delete();

        app(PermissionRegistrar::class)->forgetCachedPermissions();
    }
};

