<?php

namespace App\Controllers\Admin;

use App\Controllers\BaseController;

class Kelulusan extends BaseController
{
    protected $db;

    public function __construct()
    {
        $this->db = \Config\Database::connect();
    }

    public function index()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to(base_url('login'));

        $data = [
            'title'      => 'Manajemen Kelulusan - SMKN 1 Sukalarang',
            'siswa'      => $this->db->table('kelulusan')->orderBy('nama_siswa', 'ASC')->get()->getResultArray(),
            'pengaturan' => $this->db->table('kelulusan_pengaturan')->where('id', 1)->get()->getRowArray()
        ];

        return view('admin/kelulusan_list', $data);
    }

    public function toggle_status()
    {
        if (!session()->get('isLoggedIn')) return redirect()->to(base_url('login'));

        $current = $this->db->table('kelulusan_pengaturan')->where('id', 1)->get()->getRowArray();
        $newStatus = ($current['is_active'] == 1) ? 0 : 1;

        $this->db->table('kelulusan_pengaturan')->where('id', 1)->update(['is_active' => $newStatus]);

        $pesan = ($newStatus == 1) ? 'Pengumuman telah AKTIF dan bisa diakses publik.' : 'Pengumuman telah DIMATIKAN.';
        return redirect()->to(base_url('admin/kelulusan'))->with('success', $pesan);
    }

    public function import()
{
    if (!session()->get('isLoggedIn')) return redirect()->to(base_url('login'));

    $file = $this->request->getFile('file_excel');

    if ($file && $file->isValid() && !$file->hasMoved()) {
        $handle = fopen($file->getTempName(), "r");
        $insertData = [];
        $i = 0;

        // Menggunakan pemisah titik koma (;) sesuai file CSV Bapak
        while (($row = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $i++;
            if ($i == 1) continue; // Melewati header baris pertama

            // Pastikan baris memiliki minimal 11 kolom agar tidak error
            // Bagian dalam loop while di fungsi import()
if (count($row) >= 11) {
    $insertData[] = [
        'nisn'            => trim($row[1]),  // Kolom B: NISN
        'nama_siswa'      => trim($row[2]),  // Kolom C: Nama
        'tempat_lahir'    => trim($row[3]),  // Kolom D: Tempat Lahir
        'tanggal_lahir'   => trim($row[4]),  // Kolom E: Tanggal Lahir
        'nama_ibu'        => trim($row[5]),  // Kolom F: Nama Ibu
        'nis'             => trim($row[6]),  // Kolom G: NIS
        'rata_rata_nilai' => trim($row[7]),  // Kolom H: Rata-rata Nilai (Tadi tertukar ke Jurusan)
        'jurusan'         => trim($row[8]),  // Kolom I: Jurusan
        'status'          => strtoupper(trim($row[9])), // Kolom J: Status (LULUS)
        'keterangan'      => trim($row[10]), // Kolom K: Keterangan
    ];
}
        }
        fclose($handle);

        if (!empty($insertData)) {
            foreach ($insertData as $data) {
                // Menggunakan replace agar jika NISN sudah ada, data diperbarui[cite: 7]
                $this->db->table('kelulusan')->replace($data);
            }
            return redirect()->to(base_url('admin/kelulusan'))->with('success', count($insertData) . ' data siswa berhasil diimport.');
        }
    }
    return redirect()->back()->with('error', 'Gagal memproses file. Pastikan format CSV benar.');
}
    public function edit($id)
    {
        if (!session()->get('isLoggedIn')) return redirect()->to(base_url('login'));

        $siswa = $this->db->table('kelulusan')->where('id_lulus', $id)->get()->getRowArray();
        if (!$siswa) return redirect()->to(base_url('admin/kelulusan'))->with('error', 'Data tidak ditemukan.');

        $data = ['title' => 'Edit Siswa', 's' => $siswa];
        return view('admin/kelulusan_edit', $data);
    }

    public function update_siswa()
{
    if (!session()->get('isLoggedIn')) return redirect()->to(base_url('login'));

    $id = $this->request->getPost('id_lulus');

    // Mengambil data dari form dan membersihkan input[cite: 8, 9]
    $data = [
        'nisn'            => trim($this->request->getPost('nisn')),
        'nama_siswa'      => trim($this->request->getPost('nama_siswa')),
        'tempat_lahir'    => trim($this->request->getPost('tempat_lahir')),
        'tanggal_lahir'   => $this->request->getPost('tanggal_lahir'),
        'nama_ibu'        => trim($this->request->getPost('nama_ibu')),
        'nis'             => trim($this->request->getPost('nis')),
        'jurusan'         => trim($this->request->getPost('jurusan')),
        // PERBAIKAN BUG STATUS: Pastikan tetap LULUS/TIDAK LULUS tanpa spasi[cite: 7]
        'status'          => strtoupper(trim($this->request->getPost('status'))),
        'keterangan'      => trim($this->request->getPost('keterangan')),
        'rata_rata_nilai' => trim($this->request->getPost('rata_rata_nilai')),
    ];

    // Proses Update ke Database[cite: 9]
    $update = $this->db->table('kelulusan')->where('id_lulus', $id)->update($data);

    if ($update) {
        return redirect()->to(base_url('admin/kelulusan'))->with('success', 'Data siswa berhasil diperbarui.');
    } else {
        return redirect()->back()->with('error', 'Gagal memperbarui data.');
    }
}

    public function hapus($id)
    {
        if (!session()->get('isLoggedIn')) return redirect()->to(base_url('login'));
        $this->db->table('kelulusan')->where('id_lulus', $id)->delete();
        return redirect()->to(base_url('admin/kelulusan'))->with('success', 'Data berhasil dihapus.');
    }
    public function hapus_masal()
{
    // 1. Ambil data ID yang dikirim dari checkbox (berupa array)
    $ids = $this->request->getPost('ids');

    // 2. Validasi: Jika tidak ada data yang dicentang
    if (empty($ids)) {
        return redirect()->back()->with('error', 'Pilih minimal satu data siswa untuk dihapus!');
    }

    try {
        // 3. Proses penghapusan masal menggunakan Query Builder
        // Menghapus data di tabel 'kelulusan' di mana id_lulus ada di dalam array $ids
        $this->db->table('kelulusan')->whereIn('id_lulus', $ids)->delete();

        // 4. Kirim notifikasi sukses
        return redirect()->to(base_url('admin/kelulusan'))
                         ->with('success', count($ids) . ' data siswa berhasil dihapus secara masal.');

    } catch (\Exception $e) {
        // Jika terjadi error sistem
        return redirect()->back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
    }
}
}