<?php

namespace App\Database\Migrations;

use CodeIgniter\Database\Migration;

/**
 * Seed awal master pelanggaran berdasarkan tabel tata tertib
 * yang kamu kirim (kategori A–I + tindak pidana).
 *
 * Catatan: migration ini hanya menambah data jika belum ada
 * (dicek berdasarkan code kategori + title pelanggaran).
 */
class SeedViolationsFromPolicy extends Migration
{
    public function up()
    {
        $db = \Config\Database::connect();

        // 1) Pastikan kategori ada
        $categories = [
            'A' => ['name' => 'KETERLAMBATAN & KEHADIRAN'],
            'B' => ['name' => 'PAKAIAN'],
            'C' => ['name' => 'KEPRIBADIAN'],
            'D' => ['name' => 'KETERTIBAN'],
            'E' => ['name' => 'MEROKOK'],
            'F' => ['name' => 'PORNOGRAFI'],
            'G' => ['name' => 'SENJATA TAJAM'],
            'H' => ['name' => 'NAPZA DAN / MINUMAN KERAS'],
            'I' => ['name' => 'BERKELAHI / TAWURAN'],
            'J' => ['name' => 'TINDAK PIDANA HUKUM'],
        ];

        $catIds = [];
        foreach ($categories as $code => $cfg) {
            $row = $db->table('violation_categories')->where('code', $code)->get()->getRowArray();
            if (! $row) {
                $db->table('violation_categories')->insert([
                    'code'        => $code,
                    'name'        => $cfg['name'],
                    'description' => null,
                    'created_at'  => date('Y-m-d H:i:s'),
                    'updated_at'  => date('Y-m-d H:i:s'),
                ]);
                $catIds[$code] = (int) $db->insertID();
            } else {
                $catIds[$code] = (int) $row['id'];
            }
        }

        // Helper untuk insert jika belum ada (berdasarkan title)
        $insertViolation = function (string $code, string $title, int $score, ?string $description = null) use ($db, $catIds): void {
            if (! isset($catIds[$code])) {
                return;
            }
            $exists = $db->table('violations')
                ->where('category_id', $catIds[$code])
                ->where('title', $title)
                ->countAllResults();
            if ($exists > 0) {
                return;
            }
            $db->table('violations')->insert([
                'category_id' => $catIds[$code],
                'code'        => null,
                'title'       => $title,
                'description' => $description,
                'score'       => $score,
                'is_active'   => 1,
                'created_at'  => date('Y-m-d H:i:s'),
                'updated_at'  => date('Y-m-d H:i:s'),
            ]);
        };

        // 2) Seed pelanggaran per kategori (ringkas dari tabel yang kamu kirim)

        // A — Keterlambatan & Kehadiran
        $insertViolation('A', 'Terlambat (dipulangkan dicatat tidak hadir tanpa keterangan)', 5);
        $insertViolation('A', 'Tidak masuk tanpa keterangan', 5);
        $insertViolation('A', 'Tidak masuk dengan membuat keterangan palsu', 10);
        $insertViolation('A', 'Tidak mengikuti jam pelajaran tertentu', 5);
        $insertViolation('A', 'Keluar saat pelajaran berlangsung dan tidak kembali sampai pulang', 5);
        $insertViolation('A', 'Tidak ikut upacara bendera', 5);
        $insertViolation('A', 'Meninggalkan pelajaran atau sekolah dengan izin palsu', 10);

        // B — Pakaian
        $insertViolation('B', 'Memakai seragam tidak sesuai aturan (teguran 1)', 2);
        $insertViolation('B', 'Memakai seragam tidak sesuai aturan (teguran 2 + surat pernyataan 1)', 2);
        $insertViolation('B', 'Memakai seragam tidak sesuai aturan (teguran 3 + sanksi sekolah)', 2);
        $insertViolation('B', 'Tidak memakai seragam sekolah sesuai jadwal', 3);

        // C — Kepribadian
        $insertViolation('C', 'Berhias berlebihan', 5);
        $insertViolation('C', 'Siswa putra memakai gelang, kalung, anting', 10);
        $insertViolation('C', 'Memakai tindik di wajah atau tubuh lain (siswi)', 10);
        $insertViolation('C', 'Memakai tato / atribut tidak wajar bagi pelajar', 20);
        $insertViolation('C', 'Berduaan/bermesraan/pacaran (tindak asusila, melanggar kesopanan)', 50);
        $insertViolation('C', 'Melawan kepala sekolah/guru/karyawan dengan ancaman', 75);
        $insertViolation('C', 'Melawan kepala sekolah/guru/karyawan dengan pemukulan', 100);
        $insertViolation('C', 'Intimidasi / bullying dengan kekerasan', 75);
        $insertViolation('C', 'Tindakan tidak menyenangkan sesama siswa', 15);
        $insertViolation('C', 'Mengaktifkan HP saat KBM berlangsung', 5);
        $insertViolation('C', 'Mencemarkan nama kepala sekolah/guru/karyawan/sekolah', 50);
        $insertViolation('C', 'Diketahui hamil / menikah', 100);

        // D — Ketertiban
        $insertViolation('D', 'Mengotori / mencoret benda milik sekolah/guru/karyawan/teman/lingkungan', 15);
        $insertViolation('D', 'Merusak atau mengambil barang milik sekolah/guru/karyawan/teman', 50);
        $insertViolation('D', 'Membawa/menggunakan benda tak terkait KBM tanpa izin', 15);
        $insertViolation('D', 'Memakai sandal/sepatu sandal saat pelajaran tanpa izin', 5);
        $insertViolation('D', 'Melompat pagar sekolah untuk keluar/masuk', 20);
        $insertViolation('D', 'Tidak membuang sampah pada tempatnya', 3);
        $insertViolation('D', 'Merusak tanaman dengan sengaja', 5);

        // E — Merokok
        $insertViolation('E', 'Membawa rokok ke sekolah', 20);
        $insertViolation('E', 'Menghisap rokok di sekolah', 25);

        // F — Pornografi
        $insertViolation('F', 'Memiliki/membawa/mempergunakan media berkonten pornografi/kekerasan', 65);
        $insertViolation('F', 'Memperjualbelikan media berkonten pornografi/kekerasan', 75);

        // G — Senjata tajam
        $insertViolation('G', 'Membawa senjata tajam/api/bahan peledak tanpa izin', 100);
        $insertViolation('G', 'Memperjualbelikan senjata tajam/api/bahan peledak', 100);
        $insertViolation('G', 'Menggunakan senjata tajam/api/bahan peledak untuk mengancam/melukai', 100);

        // H — NAPZA / minuman keras
        $insertViolation('H', 'Menggunakan napza dan/atau minuman terlarang', 100);
        $insertViolation('H', 'Membawa napza dan/atau minuman terlarang', 100);
        $insertViolation('H', 'Mengedarkan/memperjualbelikan napza/minuman keras', 100);

        // I — Berkelahi / tawuran
        $insertViolation('I', 'Indikasi / berkelahi / tawuran dengan siswa sekolah lain', 100);
        $insertViolation('I', 'Berkelahi antar siswa', 100);

        // J — Tindak pidana hukum lain
        $insertViolation('J', 'Tersangkut tindak pidana lainnya', 10);
    }

    public function down()
    {
        // Tidak perlu menghapus data seed; biarkan tetap ada.
    }
}

