<?php

declare(strict_types=1);

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

/**
 * Plan 6 (C9) — subject-level regions.
 *
 * +1 колонка projects.regions INT[] (1..89 коды субъектов РФ; пустой массив = вся РФ).
 * +1 GIN-индекс idx_projects_regions для outbound regions queries.
 * region_mask/region_mode остаются (dual-write) — удаление в Plan 6.5.
 *
 * Guard'ы: migrate:fresh грузит schema.sql v8.22 (где delta уже есть) до миграций,
 * поэтому каждый кусок применяется только при отсутствии (как Sprint 4 миграция).
 */
return new class extends Migration
{
    public function up(): void
    {
        if (! Schema::hasColumn('projects', 'regions')) {
            DB::statement("ALTER TABLE projects ADD COLUMN regions INT[] NOT NULL DEFAULT '{}'::INT[]");
        }

        DB::statement('CREATE INDEX IF NOT EXISTS idx_projects_regions ON projects USING GIN (regions)');

        DB::statement(
            'COMMENT ON COLUMN projects.regions IS '
            ."'Subject-level region filter (1..89 коды субъектов РФ). Пустой массив = вся РФ. Plan 6 (v8.22).'"
        );
    }

    public function down(): void
    {
        DB::statement('DROP INDEX IF EXISTS idx_projects_regions');

        if (Schema::hasColumn('projects', 'regions')) {
            Schema::table('projects', fn ($table) => $table->dropColumn('regions'));
        }
    }
};
