<?php

namespace App\Models;

use Core\Database;
use PDO;

class Presensi
{
    public function getPresensiByNim($nim, $pertemuan = null)
    {
        $pdo = Database::getConnection();
        $data = ['presensi' => [], 'kode_prodi' => [], 'error' => null];

        try {
            // Ambil tahun akademik aktif
            $aktif = $pdo->query("
                SELECT tahun_akademik 
                FROM tb_akademik 
                WHERE status = 'Aktif' 
                LIMIT 1
            ")->fetch(PDO::FETCH_ASSOC);

            if (!$aktif) {
                $data['error'] = "Tidak ada tahun akademik aktif!";
                return $data;
            }

            // Query utama presensi (disesuaikan dengan struktur tabel)
            $sql = "
                SELECT 
                    k.kode_mk, 
                    mk.nama_mk, 
                    a.pertemuan_ke, 
                    a.status_absensi,
                    a.tanggal_absensi,
                    a.kode_kelas,
                    a.tahun_akademik
                FROM tb_krs k
                JOIN tb_absensi a 
                    ON k.id_krs = a.id_krs
                JOIN tb_mk mk 
                    ON k.kode_mk = mk.kode_mk
                JOIN tb_kelas c 
                    ON k.nim = c.nim 
                   AND k.tahun_akademik = c.tahun_akademik
                JOIN tb_akademik ak 
                    ON k.tahun_akademik = ak.tahun_akademik
                WHERE k.nim = ? 
                  AND ak.tahun_akademik = ?
            ";

            // Filter pertemuan bila ada
            if ($pertemuan) {
                $sql .= " AND a.pertemuan_ke = ?";
                $stmt = $pdo->prepare($sql);
                $stmt->execute([$nim, $aktif['tahun_akademik'], $pertemuan]);
            } else {
                $sql .= " ORDER BY a.pertemuan_ke DESC";
                $stmt = $pdo->prepare($sql);
                $stmt->execute([$nim, $aktif['tahun_akademik']]);
            }

            $data['presensi'] = $stmt->fetchAll(PDO::FETCH_ASSOC);

        } catch (\PDOException $e) {
            $data['error'] = $e->getMessage();
        }

        $data['kode_prodi'] = [
            '86207' => 'Pendidikan Guru Sekolah Dasar',
            '86206' => 'Pendidikan Guru Pendidikan Anak Usia Dini',
        ];

        return $data;
    }
}
