<?php

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

/**
 * Performans index'leri. PostgreSQL foreign key kolonlarına otomatik index
 * oluşturmaz; en çok join/filtre/sıralama yapılan kolonlara index eklenir.
 * (Küçük veri setinde ölçülebilir bir fark yok; ölçek büyüdükçe kritik olur.)
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('listings', function (Blueprint $table) {
            $table->index('category_id');            // kategori filtresi + join (FK)
            $table->index('consultant_profile_id');  // danışman ilanları + sahiplik (FK)
            $table->index('country');                // ülke filtresi + distinct
            $table->index('price');                  // fiyat aralığı + price_asc/desc + sınırlar
            $table->index('gross_area');             // alan aralığı + area_desc + sınırlar
            $table->index('view_count');             // popular sıralama
            $table->index(['status', 'published_at']); // hot path: published() + latest(published_at)
        });

        Schema::table('listing_media', function (Blueprint $table) {
            $table->index('listing_id');             // her liste görünümü cover/media eager-load eder (FK)
        });

        Schema::table('consultant_profiles', function (Blueprint $table) {
            $table->index(['application_status', 'applied_at']); // admin başvuru kuyruğu
            $table->index('is_active');              // public danışman listesi (scopeActive)
        });
    }

    public function down(): void
    {
        Schema::table('listings', function (Blueprint $table) {
            $table->dropIndex(['category_id']);
            $table->dropIndex(['consultant_profile_id']);
            $table->dropIndex(['country']);
            $table->dropIndex(['price']);
            $table->dropIndex(['gross_area']);
            $table->dropIndex(['view_count']);
            $table->dropIndex(['status', 'published_at']);
        });

        Schema::table('listing_media', function (Blueprint $table) {
            $table->dropIndex(['listing_id']);
        });

        Schema::table('consultant_profiles', function (Blueprint $table) {
            $table->dropIndex(['application_status', 'applied_at']);
            $table->dropIndex(['is_active']);
        });
    }
};
