<?php
namespace App\Controllers;

use Core\Database;
use PDO;

class DownloadDataKKNController
{
    private $db;

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

    public function index()
    {
        $bulanAwal = isset($_GET['bulan_awal']) ? $_GET['bulan_awal'] : date('m');
        $bulanAkhir = isset($_GET['bulan_akhir']) ? $_GET['bulan_akhir'] : date('m');
        $tahun = isset($_GET['tahun']) ? $_GET['tahun'] : date('Y');

        // Validasi input
        if (!preg_match('/^\d{4}$/', $tahun) || !preg_match('/^\d{2}$/', $bulanAwal) || !preg_match('/^\d{2}$/', $bulanAkhir)) {
            die('Parameter tidak valid.');
        }

        if ((int)$bulanAwal > (int)$bulanAkhir) {
            die('Bulan awal tidak boleh lebih besar dari bulan akhir.');
        }

        // Range tanggal
        $start = "$tahun-$bulanAwal-01 00:00:00";
        $end = date("Y-m-t 23:59:59", strtotime("$tahun-$bulanAkhir-01"));

        $stmt = $this->db->prepare("SELECT * FROM tb_kkn WHERE tanggal_daftar BETWEEN :start AND :end ORDER BY tanggal_daftar DESC");
        $stmt->execute(['start' => $start, 'end' => $end]);
        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // Header untuk Excel
        header("Content-Type: application/vnd.ms-excel");
        header("Content-Disposition: attachment; filename=Data_KKN_{$bulanAwal}_{$bulanAkhir}_{$tahun}.xls");

        // Fungsi untuk format tanggal Indonesia
        function formatTanggalIndo($tanggal)
        {
            $bulanIndo = [
                '01' => 'Januari', '02' => 'Februari', '03' => 'Maret', '04' => 'April',
                '05' => 'Mei', '06' => 'Juni', '07' => 'Juli', '08' => 'Agustus',
                '09' => 'September', '10' => 'Oktober', '11' => 'November', '12' => 'Desember'
            ];

            $parts = explode('-', substr($tanggal, 0, 10));
            $tahun = $parts[0];
            $bulan = $parts[1];
            $hari = $parts[2];

            return "$hari " . $bulanIndo[$bulan] . " $tahun";
        }

        // Tampilkan tabel
        echo "<table border='1'>";
        echo "<tr>
                <th>No</th><th>NIM</th><th>Nama</th><th>Prodi</th><th>Semester</th>
                <th>JK</th><th>No HP</th><th>Alamat</th><th>Daftar</th><th>Token</th>
              </tr>";

        foreach ($data as $i => $row) {
            $prodi = $row['prodi'];
            if ($prodi === 'Pendidikan Guru Sekolah Dasar') $prodi = 'PGSD';
            elseif ($prodi === 'Pendidikan Guru Pendidikan Anak Usia Dini') $prodi = 'PGPAUD';

            $jk = $row['jenis_kelamin'] === 'Laki-laki' ? 'L' :
                  ($row['jenis_kelamin'] === 'Perempuan' ? 'P' : $row['jenis_kelamin']);

            $tanggalDaftar = formatTanggalIndo($row['tanggal_daftar']);

            echo "<tr>
                    <td>" . ($i + 1) . "</td>
                    <td>{$row['nim']}</td>
                    <td>{$row['nama']}</td>
                    <td>{$prodi}</td>
                    <td>{$row['semester']}</td>
                    <td>{$jk}</td>
                    <td>{$row['no_hp']}</td>
                    <td>{$row['alamat']}</td>
                    <td>{$tanggalDaftar}</td>
                    <td>{$row['token']}</td>
                  </tr>";
        }

        echo "</table>";
        exit;
    }
}
