<?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
{
    public function up(): void
    {
        // 1. Tambah kolom baru ke data_siswas
        Schema::table('data_siswas', function (Blueprint $table) {
            $table->renameColumn('nama_siswa', 'nama_penerima');
        });

        Schema::table('data_siswas', function (Blueprint $table) {
            $table->integer('kode_jk')->nullable()->after('jenis_kelamin');
            $table->string('nama_orangtua')->nullable()->after('kode_jk');
            $table->tinyInteger('jabatan_kode')->default(1)->after('nama_orangtua');
            $table->string('jabatan', 100)->default('Siswa')->after('jabatan_kode');
            $table->string('no_hp', 30)->nullable()->after('alergi');
        });

        // 2. Update data siswa lama — set jabatan_kode=1 dan mapping kode_jk
        DB::table('data_siswas')->whereNull('jabatan_kode')->orWhere('jabatan_kode', 0)->update([
            'jabatan_kode' => 1,
            'jabatan' => 'Siswa',
        ]);

        DB::table('data_siswas')->where('jenis_kelamin', 'L')->update(['kode_jk' => 392]);
        DB::table('data_siswas')->where('jenis_kelamin', 'P')->update(['kode_jk' => 64]);

        // 3. Migrasi data dari data_tendiks ke data_siswas
        $tendiks = DB::table('data_tendiks')->get();

        foreach ($tendiks as $t) {
            $jabatan = $t->jabatan ?? '';
            $jabatanLower = strtolower($jabatan);

            // Guru & Kepala Sekolah → kode 2, lainnya → kode 3
            $isGuruKepsek = str_contains($jabatanLower, 'guru')
                || str_contains($jabatanLower, 'kepala sekolah')
                || str_contains($jabatanLower, 'wakil kepala');

            $kodeJk = null;
            if ($t->jenis_kelamin === 'L') $kodeJk = 392;
            elseif ($t->jenis_kelamin === 'P') $kodeJk = 64;

            DB::table('data_siswas')->insert([
                'id_sekolah' => $t->id_sekolah,
                'dapur_id' => $t->dapur_id,
                'nisn' => null,
                'nama_penerima' => $t->nama_tendik,
                'tanggal_lahir' => $t->tanggal_lahir,
                'jenis_kelamin' => $t->jenis_kelamin,
                'kode_jk' => $kodeJk,
                'nama_orangtua' => null,
                'jabatan_kode' => $isGuruKepsek ? 2 : 3,
                'jabatan' => $jabatan ?: ($isGuruKepsek ? 'Guru' : 'Staf'),
                'kelas' => null,
                'tinggi_badan' => 0,
                'berat_badan' => 0,
                'alergi' => '-',
                'no_hp' => $t->no_hp,
                'status' => $t->status ?? 'Aktif',
                'created_at' => $t->created_at,
                'updated_at' => $t->updated_at,
            ]);
        }

        // 4. Index baru untuk performa query berdasarkan jabatan_kode
        Schema::table('data_siswas', function (Blueprint $table) {
            $table->index('jabatan_kode');
        });
    }

    public function down(): void
    {
        Schema::table('data_siswas', function (Blueprint $table) {
            $table->dropIndex(['jabatan_kode']);
            $table->dropColumn(['kode_jk', 'nama_orangtua', 'jabatan_kode', 'jabatan', 'no_hp']);
        });

        Schema::table('data_siswas', function (Blueprint $table) {
            $table->renameColumn('nama_penerima', 'nama_siswa');
        });
    }
};
