<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        // jumlah_buku: buang idx_user_id_tmp jika wujud
        $hasIdx = collect(\DB::select("SHOW INDEX FROM jumlah_buku WHERE Key_name = 'idx_user_id_tmp'"))->isNotEmpty();
        if ($hasIdx) {
            \DB::statement('ALTER TABLE jumlah_buku DROP INDEX idx_user_id_tmp');
        }

        // maklumat_buku_darjah: kemaskini unique key jika lama masih wujud DAN tahun column wujud
        $hasTahun = Schema::hasColumn('maklumat_buku_darjah', 'tahun');
        $hasOldKey = collect(\DB::select("SHOW INDEX FROM maklumat_buku_darjah WHERE Key_name = 'maklumat_buku_darjah_user_id_darjah_unique'"))->isNotEmpty();
        if ($hasOldKey && $hasTahun) {
            \DB::statement('ALTER TABLE maklumat_buku_darjah ADD INDEX idx_mbd_user_id_tmp (user_id)');
            \DB::statement('ALTER TABLE maklumat_buku_darjah DROP INDEX maklumat_buku_darjah_user_id_darjah_unique');
            \DB::statement('ALTER TABLE maklumat_buku_darjah ADD UNIQUE KEY maklumat_user_tahun_darjah_unique (user_id, tahun, darjah)');
            \DB::statement('ALTER TABLE maklumat_buku_darjah DROP INDEX idx_mbd_user_id_tmp');
        }
    }

    public function down(): void
    {
        \DB::statement('ALTER TABLE jumlah_buku ADD INDEX idx_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_user_id_tmp');
        \DB::statement('ALTER TABLE jumlah_buku DROP COLUMN tahun');

        \DB::statement('ALTER TABLE maklumat_buku_darjah ADD INDEX idx_mbd_user_id_tmp (user_id)');
        \DB::statement('ALTER TABLE maklumat_buku_darjah DROP INDEX maklumat_user_tahun_darjah_unique');
        \DB::statement('ALTER TABLE maklumat_buku_darjah ADD UNIQUE KEY maklumat_buku_darjah_user_id_darjah_unique (user_id, darjah)');
        \DB::statement('ALTER TABLE maklumat_buku_darjah DROP INDEX idx_mbd_user_id_tmp');
        \DB::statement('ALTER TABLE maklumat_buku_darjah DROP COLUMN tahun');
    }
};
