<?php

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

return new class extends Migration
{
    public function up(): void
    {
        if (!Schema::hasColumn('jumlah_buku', 'tahun')) {
            Schema::table('jumlah_buku', function (Blueprint $table) {
                $table->integer('tahun')->after('user_id');
            });
        }

        // Update unique key: (user_id, kod_buku) → (user_id, tahun, kod_buku)
        $hasOldKey = collect(\DB::select("SHOW INDEX FROM jumlah_buku WHERE Key_name = 'jumlah_buku_user_id_kod_buku_unique'"))->isNotEmpty();
        if ($hasOldKey) {
            \DB::statement('ALTER TABLE jumlah_buku ADD INDEX idx_jb_user_id_tmp (user_id)');
            \DB::statement('ALTER TABLE jumlah_buku DROP INDEX jumlah_buku_user_id_kod_buku_unique');
            \DB::statement('ALTER TABLE jumlah_buku ADD UNIQUE KEY jumlah_buku_user_tahun_kod_unique (user_id, tahun, kod_buku)');
            \DB::statement('ALTER TABLE jumlah_buku DROP INDEX idx_jb_user_id_tmp');
        }
    }

    public function down(): void
    {
        $hasNewKey = collect(\DB::select("SHOW INDEX FROM jumlah_buku WHERE Key_name = 'jumlah_buku_user_tahun_kod_unique'"))->isNotEmpty();
        if ($hasNewKey) {
            \DB::statement('ALTER TABLE jumlah_buku ADD INDEX idx_jb_user_id_tmp (user_id)');
            \DB::statement('ALTER TABLE jumlah_buku DROP INDEX jumlah_buku_user_tahun_kod_unique');
            \DB::statement('ALTER TABLE jumlah_buku ADD UNIQUE KEY jumlah_buku_user_id_kod_buku_unique (user_id, kod_buku)');
            \DB::statement('ALTER TABLE jumlah_buku DROP INDEX idx_jb_user_id_tmp');
        }

        Schema::table('jumlah_buku', function (Blueprint $table) {
            $table->dropColumn('tahun');
        });
    }
};
