<?php

declare(strict_types=1);

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

/**
 * Wildcard subdomain desteği.
 *
 * is_wildcard=true → Apache vhost'a ServerAlias *.{domain} eklenir;
 * `foo.example.com`, `bar.example.com` gibi her subdomain isteği main
 * vhost'a düşer. DNS tarafında da `*` A kaydı eklenir.
 *
 * wildcard_target_path opsiyonel — default public_html; alt klasör de
 * gösterilebilir (ör. /home/user/public_html/wildcard).
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('domains', function (Blueprint $table) {
            if (! Schema::hasColumn('domains', 'is_wildcard')) {
                $table->boolean('is_wildcard')
                    ->default(false)
                    ->after('reverse_proxy_enabled')
                    ->comment('ServerAlias *.{domain} aktif mi');
            }

            if (! Schema::hasColumn('domains', 'wildcard_target_path')) {
                $table->string('wildcard_target_path')
                    ->nullable()
                    ->after('is_wildcard')
                    ->comment('Wildcard hedef DocumentRoot — null ise default vhost path');
            }
        });

        // İndeksi ayrı bir Schema::table çağrısında ekle ki hasColumn guard
        // ile çakışmasın (column yoksa addColumn → flush → addIndex)
        Schema::table('domains', function (Blueprint $table) {
            $indexes = collect(Schema::getIndexes('domains'))->pluck('name')->all();
            if (! in_array('domains_is_wildcard_index', $indexes, true)) {
                $table->index('is_wildcard');
            }
        });
    }

    public function down(): void
    {
        Schema::table('domains', function (Blueprint $table) {
            $indexes = collect(Schema::getIndexes('domains'))->pluck('name')->all();
            if (in_array('domains_is_wildcard_index', $indexes, true)) {
                $table->dropIndex('domains_is_wildcard_index');
            }

            if (Schema::hasColumn('domains', 'wildcard_target_path')) {
                $table->dropColumn('wildcard_target_path');
            }
            if (Schema::hasColumn('domains', 'is_wildcard')) {
                $table->dropColumn('is_wildcard');
            }
        });
    }
};
