<?php

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

class CreateIkkTables extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // Tabel Bank Soal SIKK (Master IKK)
        Schema::create('bank_soal_sikk', function (Blueprint $table) {
            $table->id();
            $table->string('kode_ikk', 20)->unique();
            $table->string('urusan', 100);
            $table->string('bidang', 100);
            $table->string('ikk_output', 200);
            $table->text('ikk_outcome');
            $table->text('rumus_perhitungan');
            $table->string('satuan', 50);
            $table->string('sumber_data', 200);
            $table->string('opd_penanggung_jawab', 100);
            $table->year('tahun_mulai');
            $table->enum('status', ['Aktif', 'Tidak Aktif'])->default('Aktif');
            $table->timestamps();
        });

        // Tabel Lembar Jawab IKK
        Schema::create('lembar_jawab_ikk', function (Blueprint $table) {
            $table->id();
            $table->foreignId('bank_soal_id')->constrained('bank_soal_sikk')->onDelete('cascade');
            $table->string('opd', 100);
            $table->year('tahun');
            $table->decimal('capaian', 10, 2);
            $table->text('kendala')->nullable();
            $table->text('tindak_lanjut')->nullable();
            $table->string('file_bukti')->nullable();
            $table->enum('status', ['DRAFT', 'DIAJUKAN', 'DIVERIFIKASI', 'PERLU PERBAIKAN'])->default('DRAFT');
            $table->timestamps();
            $table->index(['opd', 'tahun', 'status']);
        });

        // Tabel Pelaporan IKK
        Schema::create('pelaporan_ikk', function (Blueprint $table) {
            $table->id();
            $table->foreignId('bank_soal_id')->constrained('bank_soal_sikk')->onDelete('cascade');
            $table->string('opd', 100);
            $table->year('tahun');
            $table->decimal('capaian', 10, 2);
            $table->text('kendala')->nullable();
            $table->text('tindak_lanjut')->nullable();
            $table->string('file_bukti')->nullable();
            $table->enum('status', ['DRAFT', 'DIAJUKAN', 'DIVERIFIKASI', 'PERLU PERBAIKAN'])->default('DRAFT');
            $table->timestamps();
            $table->index(['opd', 'tahun', 'status']);
        });

        // Tabel Pertanyaan Pelaporan IKK
        Schema::create('pertanyaan_pelaporan_ikk', function (Blueprint $table) {
            $table->id();
            $table->text('pertanyaan');
            $table->boolean('is_active')->default(true);
            $table->integer('urutan')->default(0);
            $table->timestamps();
        });

        // Tabel Jawaban Pertanyaan Pelaporan
        Schema::create('jawaban_pertanyaan_pelaporan', function (Blueprint $table) {
            $table->id();
            $table->foreignId('pelaporan_id')->constrained('pelaporan_ikk')->onDelete('cascade');
            $table->foreignId('pertanyaan_id')->constrained('pertanyaan_pelaporan_ikk')->onDelete('cascade');
            $table->text('jawaban');
            $table->timestamps();
        });

        // Insert sample data untuk Bank Soal SIKK
        DB::table('bank_soal_sikk')->insert([
            [
                'kode_ikk' => '1.a.1',
                'urusan' => 'Pendidikan',
                'bidang' => 'Pendidikan Dasar',
                'ikk_output' => 'Angka Partisipasi Murni SD',
                'ikk_outcome' => 'Meningkatnya akses pendidikan dasar',
                'rumus_perhitungan' => '(Jumlah siswa SD usia 7-12 tahun / Jumlah penduduk usia 7-12 tahun) x 100',
                'satuan' => 'Persen (%)',
                'sumber_data' => 'Dapodik Kemendikbud',
                'opd_penanggung_jawab' => 'Dinas Pendidikan',
                'tahun_mulai' => 2020,
                'status' => 'Aktif',
                'created_at' => now(),
                'updated_at' => now()
            ],
            [
                'kode_ikk' => '2.b.1',
                'urusan' => 'Kesehatan',
                'bidang' => 'Pelayanan Kesehatan',
                'ikk_output' => 'Cakupan Imunisasi Dasar',
                'ikk_outcome' => 'Menurunnya angka kesakitan',
                'rumus_perhitungan' => '(Jumlah bayi yang mendapat imunisasi dasar lengkap / Jumlah bayi yang ada) x 100',
                'satuan' => 'Persen (%)',
                'sumber_data' => 'Puskesmas dan Posyandu',
                'opd_penanggung_jawab' => 'Dinas Kesehatan',
                'tahun_mulai' => 2020,
                'status' => 'Aktif',
                'created_at' => now(),
                'updated_at' => now()
            ],
            [
                'kode_ikk' => '3.c.1',
                'urusan' => 'Infrastruktur',
                'bidang' => 'Jalan dan Jembatan',
                'ikk_output' => 'Panjang Jalan dalam Kondisi Baik',
                'ikk_outcome' => 'Meningkatnya konektivitas wilayah',
                'rumus_perhitungan' => '(Panjang jalan dalam kondisi baik / Total panjang jalan) x 100',
                'satuan' => 'Persen (%)',
                'sumber_data' => 'Survei Kondisi Jalan',
                'opd_penanggung_jawab' => 'Dinas PUPR',
                'tahun_mulai' => 2020,
                'status' => 'Aktif',
                'created_at' => now(),
                'updated_at' => now()
            ]
        ]);

        // Insert sample pertanyaan
        DB::table('pertanyaan_pelaporan_ikk')->insert([
            [
                'pertanyaan' => 'Bagaimana tingkat kepuasan masyarakat terhadap pelayanan?',
                'is_active' => true,
                'urutan' => 1,
                'created_at' => now(),
                'updated_at' => now()
            ],
            [
                'pertanyaan' => 'Apakah informasi yang diberikan sudah jelas dan mudah dipahami?',
                'is_active' => true,
                'urutan' => 2,
                'created_at' => now(),
                'updated_at' => now()
            ],
            [
                'pertanyaan' => 'Bagaimana kecepatan pelayanan yang diberikan?',
                'is_active' => true,
                'urutan' => 3,
                'created_at' => now(),
                'updated_at' => now()
            ]
        ]);

        // Insert sample lembar jawab
        DB::table('lembar_jawab_ikk')->insert([
            [
                'bank_soal_id' => 1,
                'opd' => 'Dinas Pendidikan',
                'tahun' => 2024,
                'capaian' => 95.5,
                'kendala' => 'Kurangnya sarana prasarana di daerah terpencil',
                'tindak_lanjut' => 'Pembangunan sekolah baru di daerah terpencil',
                'file_bukti' => null,
                'status' => 'DIVERIFIKASI',
                'created_at' => now(),
                'updated_at' => now()
            ],
            [
                'bank_soal_id' => 2,
                'opd' => 'Dinas Kesehatan',
                'tahun' => 2024,
                'capaian' => 88.2,
                'kendala' => 'Keterbatasan tenaga vaksin',
                'tindak_lanjut' => 'Rekrutmen tenaga kesehatan tambahan',
                'file_bukti' => null,
                'status' => 'DIAJUKAN',
                'created_at' => now(),
                'updated_at' => now()
            ],
            [
                'bank_soal_id' => 3,
                'opd' => 'Dinas PUPR',
                'tahun' => 2024,
                'capaian' => 75.0,
                'kendala' => 'Anggaran terbatas untuk perbaikan jalan',
                'tindak_lanjut' => 'Pengajuan tambahan anggaran tahun depan',
                'file_bukti' => null,
                'status' => 'DRAFT',
                'created_at' => now(),
                'updated_at' => now()
            ]
        ]);
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('jawaban_pertanyaan_pelaporan');
        Schema::dropIfExists('pertanyaan_pelaporan_ikk');
        Schema::dropIfExists('pelaporan_ikk');
        Schema::dropIfExists('lembar_jawab_ikk');
        Schema::dropIfExists('bank_soal_sikk');
    }
}
