<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     * Menambahkan indexes untuk kolom yang sering di-query di API endpoints
     * untuk meningkatkan performa query database
     */
    public function up(): void
    {
        // Index untuk anggota.uid - digunakan di /api/esp/scan
        if (!Schema::hasColumn('anggotas', 'uid')) {
            return;
        }

        Schema::table('anggotas', function (Blueprint $table) {
            // Try to add index - will skip if already exists
            try {
                $table->index('uid', 'idx_uid');
            } catch (\Exception $e) {
                // Index sudah ada atau error lainnya
            }
        });

        // Index untuk koleksis.kode_eksemplar - digunakan di /api/esp/scan-buku
        Schema::table('koleksis', function (Blueprint $table) {
            try {
                $table->index('kode_eksemplar', 'idx_kode_eksemplar');
            } catch (\Exception $e) {
                // Index sudah ada
            }
        });

        // Composite index untuk borrow_transactions (status + kolecsi_id)
        // Digunakan di /api/esp/scan-buku WHERE status='dipinjam' AND kolecsi_id=?
        Schema::table('borrow_transactions', function (Blueprint $table) {
            try {
                $table->index(['status', 'kolecsi_id'], 'idx_status_kolecsi');
            } catch (\Exception $e) {
                // Index sudah ada
            }
        });

        // Index untuk borrow_transactions.status - digunakan dalam berbagai queries
        Schema::table('borrow_transactions', function (Blueprint $table) {
            try {
                $table->index('status', 'idx_status');
            } catch (\Exception $e) {
                // Index sudah ada
            }
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::table('anggotas', function (Blueprint $table) {
            try {
                $table->dropIndex('idx_uid');
            } catch (\Exception $e) {
                // Index tidak ada
            }
        });

        Schema::table('koleksis', function (Blueprint $table) {
            try {
                $table->dropIndex('idx_kode_eksemplar');
            } catch (\Exception $e) {
                // Index tidak ada
            }
        });

        Schema::table('borrow_transactions', function (Blueprint $table) {
            try {
                $table->dropIndex('idx_status_kolecsi');
            } catch (\Exception $e) {
                // Index tidak ada
            }
            try {
                $table->dropIndex('idx_status');
            } catch (\Exception $e) {
                // Index tidak ada
            }
        });
    }
};

