<?php

namespace App\Controllers;

use Core\Database;
use FPDF;

require_once __DIR__ . '/../libraries/fpdf/fpdf.php';

class PDF extends FPDF
{
    function Header()
    {
        $this->Image('assets/img/kop_surat.jpg', 3, 3, 205);
        $this->Ln(40); // Spasi setelah gambar header
    }
}

class CetakPresensiPdfController
{
    public function index()
    {
        $db = Database::getConnection();

        $id_dmk = $_GET['id_dmk'] ?? null;
        $pertemuan = $_GET['pertemuan'] ?? null;

        if (!$id_dmk || !$pertemuan) {
            die('Parameter tidak lengkap.');
        }

        // Ambil detail matkul
        $stmt = $db->prepare("
            SELECT mk.nama_mk, d.nama AS nama_dosen, mk.kode_mk, dmk.kode_kelas, dmk.tahun_akademik
            FROM tb_dosen_mk dmk
            JOIN tb_dosen d ON dmk.niy = d.niy
            JOIN tb_mk mk ON dmk.kode_mk = mk.kode_mk
            WHERE dmk.id_dmk = :id_dmk
        ");
        $stmt->execute(['id_dmk' => $id_dmk]);
        $detail = $stmt->fetch();

        if (!$detail) {
            die('Data matkul tidak ditemukan.');
        }

        // Ambil tanggal presensi dilakukan (terlama)
        $stmt = $db->prepare("
            SELECT MIN(tanggal_absensi) AS tanggal
            FROM tb_absensi a
            JOIN tb_krs k ON a.id_krs = k.id_krs
            JOIN tb_kelas kl ON kl.nim = k.nim
            WHERE k.kode_mk = :kode_mk
              AND k.tahun_akademik = :tahun_akademik
              AND kl.kode_kelas = :kode_kelas
              AND kl.tahun_akademik = :tahun_akademik
              AND a.pertemuan_ke = :pertemuan
        ");
        $stmt->execute([
            'kode_mk' => $detail['kode_mk'],
            'tahun_akademik' => $detail['tahun_akademik'],
            'kode_kelas' => $detail['kode_kelas'],
            'pertemuan' => $pertemuan
        ]);
        $tanggal = $stmt->fetchColumn();
        $tanggal_presensi = $tanggal ? $this->formatTanggalIndonesia($tanggal) : '-';

        // Ambil data presensi mahasiswa
        $stmt = $db->prepare("
            SELECT 
                m.nim, 
                m.nama, 
                a.status_absensi
            FROM tb_krs k
            INNER JOIN tb_mahasiswa m ON k.nim = m.nim
            INNER JOIN tb_kelas kl ON kl.nim = m.nim
            LEFT JOIN tb_absensi a 
                ON a.id_krs = k.id_krs 
                AND a.pertemuan_ke = :pertemuan
            WHERE k.kode_mk = :kode_mk
              AND k.tahun_akademik = :tahun_akademik
              AND kl.kode_kelas = :kode_kelas
              AND kl.tahun_akademik = :tahun_akademik
            ORDER BY m.nim
        ");
        $stmt->execute([
            'pertemuan' => $pertemuan,
            'kode_mk' => $detail['kode_mk'],
            'tahun_akademik' => $detail['tahun_akademik'],
            'kode_kelas' => $detail['kode_kelas']
        ]);
        $mahasiswa = $stmt->fetchAll();

        // PDF
        $pdf = new PDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial', 'B', 14);
        $pdf->Cell(0, 10, 'DAFTAR PRESENSI MAHASISWA', 0, 1, 'C');
        $pdf->Ln(2);

        $pdf->SetFont('Arial', '', 12);
        $pdf->Cell(35, 8, 'Mata Kuliah', 0, 0);
        $pdf->Cell(5, 8, ':', 0, 0);
        $pdf->Cell(0, 8, $detail['nama_mk'], 0, 1);

        $pdf->Cell(35, 8, 'Dosen', 0, 0);
        $pdf->Cell(5, 8, ':', 0, 0);
        $pdf->Cell(0, 8, $detail['nama_dosen'], 0, 1);

        $pdf->Cell(35, 8, 'Kelas', 0, 0);
        $pdf->Cell(5, 8, ':', 0, 0);
        $pdf->Cell(0, 8, $detail['kode_kelas'], 0, 1);

        $pdf->Cell(35, 8, 'Pertemuan', 0, 0);
        $pdf->Cell(5, 8, ':', 0, 0);
        $pdf->Cell(0, 8, $pertemuan, 0, 1);

        $pdf->Cell(35, 8, 'Tanggal Presensi', 0, 0);
        $pdf->Cell(5, 8, ':', 0, 0);
        $pdf->Cell(0, 8, $tanggal_presensi, 0, 1);
        $pdf->Ln(5);

        $pdf->Ln(3);
        $pdf->SetFont('Arial', 'B', 12);
        $pdf->Cell(10, 10, 'No', 1, 0, 'C');
        $pdf->Cell(35, 10, 'NIM', 1, 0, 'C');
        $pdf->Cell(85, 10, 'Nama Mahasiswa', 1, 0, 'C');
        $pdf->Cell(50, 10, 'Status Kehadiran', 1, 1, 'C');

        $pdf->SetFont('Arial', '', 11);
        $no = 1;
        foreach ($mahasiswa as $mhs) {
            $pdf->Cell(10, 10, $no++, 1, 0, 'C');
            $pdf->Cell(35, 10, $mhs['nim'], 1, 0);
            $pdf->Cell(85, 10, $mhs['nama'], 1, 0);
            $pdf->Cell(50, 10, $mhs['status_absensi'] ?? '-', 1, 1, 'C');
        }

        ob_end_clean();
        $nama_file = "Presensi_{$detail['nama_mk']}_{$detail['nama_dosen']}_Pertemuan_{$pertemuan}.pdf";
        $pdf->Output($nama_file, 'I');
    }

    private function formatTanggalIndonesia($tanggal)
    {
        $bulan = [
            '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('-', $tanggal);
        return $parts[2] . ' ' . $bulan[$parts[1]] . ' ' . $parts[0];
    }
}
