<?php
session_start();
if (!isset($_SESSION['username']) || !in_array($_SESSION['role'], ['admin', 'guru'])) {
    header("Location: index.php");
    exit;
}

// Sertakan file FPDF dari folder fpdf
require_once('fpdf/fpdf.php');

// Koneksi database
include 'config.php';

// Ambil parameter filter
$kelas = $_GET['kelas'] ?? '';
$status = $_GET['status'] ?? '';
$dari_tanggal = $_GET['dari_tanggal'] ?? '';
$sampai_tanggal = $_GET['sampai_tanggal'] ?? '';

// Ambil nama sekolah dan kepala sekolah
$profil = mysqli_fetch_assoc(mysqli_query($conn, "SELECT nama_sekolah, kepala_sekolah, nip_kepala FROM profil_sekolah LIMIT 1"));
$nama_sekolah = $profil['nama_sekolah'] ?? 'Nama Sekolah';
$kepala_sekolah = $profil['kepala_sekolah'] ?? '....................................';
$nip_kepala = $profil['nip_kepala'] ?? '........................';

// Ambil data guru yang login untuk tanda tangan
$username = $_SESSION['username'];
$guru_nama = '';
$query = "SELECT * FROM guru WHERE nip = '$username' LIMIT 1";
$result = mysqli_query($conn, $query);
if ($result && mysqli_num_rows($result) > 0) {
    $guru = mysqli_fetch_assoc($result);
    $guru_nama = $guru['nama'];
} else {
    $query_user = "SELECT * FROM users WHERE username = '$username' AND role = 'guru' LIMIT 1";
    $result_user = mysqli_query($conn, $query_user);
    if ($result_user && mysqli_num_rows($result_user) > 0) {
        $user = mysqli_fetch_assoc($result_user);
        $guru_nama = $user['nama'] ?? $username;
    }
}

// Bangun query untuk mengambil semua pelanggaran
$query = "SELECT p.*, 
                 s.nama as nama_siswa, 
                 s.nisn, 
                 s.kelas,
                 g.nama as nama_guru_pelapor
          FROM pelanggaran p 
          LEFT JOIN siswa s ON p.siswa_id = s.id 
          LEFT JOIN guru g ON p.guru_id = g.id
          WHERE 1=1";

if (!empty($kelas)) {
    $query .= " AND s.kelas = '$kelas'";
}

if (!empty($status)) {
    $query .= " AND p.status = '$status'";
}

if (!empty($dari_tanggal)) {
    $query .= " AND p.tanggal >= '$dari_tanggal'";
}

if (!empty($sampai_tanggal)) {
    $query .= " AND p.tanggal <= '$sampai_tanggal'";
}

$query .= " ORDER BY p.tanggal DESC, p.created_at DESC";

$result = mysqli_query($conn, $query);
$pelanggaran_list = [];
while ($row = mysqli_fetch_assoc($result)) {
    $pelanggaran_list[] = $row;
}

// Hitung statistik
$total = count($pelanggaran_list);
$aktif = 0;
$selesai = 0;
$berat = 0;
$sedang = 0;
$ringan = 0;
$total_poin = 0;

foreach ($pelanggaran_list as $p) {
    if ($p['status'] == 'Aktif') $aktif++;
    else $selesai++;
    
    if ($p['poin'] >= 50) $berat++;
    elseif ($p['poin'] >= 25) $sedang++;
    else $ringan++;
    
    $total_poin += $p['poin'];
}

// Format tanggal untuk judul
$tanggal_cetak = date('d F Y');
$filter_text = '';
if (!empty($kelas)) $filter_text .= "Kelas: $kelas | ";
if (!empty($status)) $filter_text .= "Status: $status | ";
if (!empty($dari_tanggal)) $filter_text .= "Dari: " . date('d/m/Y', strtotime($dari_tanggal)) . " | ";
if (!empty($sampai_tanggal)) $filter_text .= "Sampai: " . date('d/m/Y', strtotime($sampai_tanggal)) . " | ";
if (empty($filter_text)) $filter_text = "Semua Data";

// Buat PDF dengan ukuran Landscape A4
class PDF extends FPDF
{
    function __construct()
    {
        parent::__construct('L', 'mm', 'A4'); // Landscape A4
    }

    function Header()
    {
        global $nama_sekolah;
        
        // Judul
        $this->SetFont('Arial', 'B', 16);
        $this->Cell(0, 10, $nama_sekolah, 0, 1, 'C');
        $this->SetFont('Arial', 'B', 14);
        $this->Cell(0, 8, 'LAPORAN SEMUA PELANGGARAN', 0, 1, 'C');
        $this->SetFont('Arial', 'I', 10);
        $this->Cell(0, 6, 'Tanggal Cetak: ' . date('d F Y'), 0, 1, 'C');
        $this->Ln(5);
        
        // Garis
        $this->Line(10, $this->GetY(), 290, $this->GetY());
        $this->Ln(5);
    }

    function Footer()
    {
        $this->SetY(-15);
        $this->SetFont('Arial', 'I', 8);
        $this->Cell(0, 10, 'Halaman ' . $this->PageNo() . ' / {nb}', 0, 0, 'C');
    }
    
    function TabelRapi($data)
    {
        // Lebar kolom untuk landscape A4 (total 280)
        $w = array(
            8,    // No
            18,   // Tanggal
            25,   // NISN
            50,   // Nama Siswa
            15,   // Kelas
            60,   // Jenis Pelanggaran
            12,   // Poin
            20,   // Status
            20,   // Klasifikasi
            25,   // Pelapor
            15,   // Dialihkan
            12    // Aksi
        );
        
        // Header
        $this->SetFont('Arial', 'B', 8);
        $this->SetFillColor(220, 220, 220);
        
        $header = array('No', 'Tanggal', 'NISN', 'Nama Siswa', 'Kls', 'Jenis Pelanggaran', 'Poin', 'Status', 'Klasifikasi', 'Pelapor', 'Alih', 'Aksi');
        
        for($i = 0; $i < count($header); $i++) {
            $this->Cell($w[$i], 8, $header[$i], 1, 0, 'C', true);
        }
        $this->Ln();
        
        // Data
        $this->SetFont('Arial', '', 7);
        $fill = false;
        $no = 1;
        
        if (empty($data)) {
            $this->Cell(array_sum($w), 8, 'TIDAK ADA DATA', 1, 1, 'C', $fill);
        } else {
            foreach($data as $row) {
                // Klasifikasi
                if ($row['poin'] >= 50) {
                    $klasifikasi = 'Berat';
                } elseif ($row['poin'] >= 25) {
                    $klasifikasi = 'Sedang';
                } else {
                    $klasifikasi = 'Ringan';
                }
                
                // Status Alihkan
                $dialihkan = ($row['status_alihkan'] == 'ya') ? 'Ya' : 'Tidak';
                
                // Cek apakah perlu halaman baru - sisakan ruang untuk tanda tangan
                if ($this->GetY() > 160) { // Kurangi batas untuk sisakan ruang tanda tangan
                    // Hitung sisa baris yang bisa muat
                    $sisaBaris = $this->PageBreakTrigger - $this->GetY();
                    if ($sisaBaris < 40) { // Jika sisa kurang dari 40mm, pindah halaman
                        $this->AddPage();
                        // Header tabel di halaman baru
                        $this->SetFont('Arial', 'B', 8);
                        $this->SetFillColor(220, 220, 220);
                        for($i = 0; $i < count($header); $i++) {
                            $this->Cell($w[$i], 8, $header[$i], 1, 0, 'C', true);
                        }
                        $this->Ln();
                        $this->SetFont('Arial', '', 7);
                    }
                }
                
                // No
                $this->Cell($w[0], 6, $no++, 'LR', 0, 'C', $fill);
                
                // Tanggal
                $this->Cell($w[1], 6, date('d/m/Y', strtotime($row['tanggal'])), 'LR', 0, 'C', $fill);
                
                // NISN
                $this->Cell($w[2], 6, $row['nisn'] ?? '-', 'LR', 0, 'C', $fill);
                
                // Nama Siswa
                $nama = $row['nama_siswa'] ?? '-';
                if (strlen($nama) > 25) $nama = substr($nama, 0, 23) . '..';
                $this->Cell($w[3], 6, $nama, 'LR', 0, 'L', $fill);
                
                // Kelas
                $this->Cell($w[4], 6, $row['kelas'] ?? '-', 'LR', 0, 'C', $fill);
                
                // Jenis Pelanggaran
                $jenis = $row['jenis_pelanggaran'];
                if (strlen($jenis) > 35) $jenis = substr($jenis, 0, 33) . '..';
                $this->Cell($w[5], 6, $jenis, 'LR', 0, 'L', $fill);
                
                // Poin
                $this->Cell($w[6], 6, $row['poin'], 'LR', 0, 'C', $fill);
                
                // Status
                $status_text = $row['status'];
                $this->Cell($w[7], 6, $status_text, 'LR', 0, 'C', $fill);
                
                // Klasifikasi
                $this->Cell($w[8], 6, $klasifikasi, 'LR', 0, 'C', $fill);
                
                // Pelapor
                $pelapor = $row['nama_guru_pelapor'] ?? '-';
                if (strlen($pelapor) > 15) $pelapor = substr($pelapor, 0, 13) . '..';
                $this->Cell($w[9], 6, $pelapor, 'LR', 0, 'C', $fill);
                
                // Dialihkan
                $this->Cell($w[10], 6, $dialihkan, 'LR', 0, 'C', $fill);
                
                // Aksi
                $this->Cell($w[11], 6, 'Detail', 'LR', 0, 'C', $fill);
                
                $this->Ln();
                $fill = !$fill;
            }
            
            // Garis bawah
            $this->Cell(array_sum($w), 0, '', 'T');
        }
    }
    
    function StatistikRapi($total, $aktif, $selesai, $berat, $sedang, $ringan, $total_poin, $rata2)
    {
        $this->SetFont('Arial', 'B', 11);
        $this->Cell(0, 7, 'STATISTIK PELANGGARAN', 0, 1);
        $this->Ln(3);
        
        // Baris 1
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Total Pelanggaran:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $total, 0, 0);
        
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Total Poin:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $total_poin, 0, 1);
        
        // Baris 2
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Pelanggaran Aktif:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $aktif, 0, 0);
        
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Pelanggaran Selesai:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $selesai, 0, 1);
        
        // Baris 3
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Pelanggaran Berat:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $berat, 0, 0);
        
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Pelanggaran Sedang:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $sedang, 0, 1);
        
        // Baris 4
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Pelanggaran Ringan:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $ringan, 0, 0);
        
        $this->SetFont('Arial', '', 10);
        $this->Cell(55, 7, 'Rata-rata Poin:', 0, 0);
        $this->SetFont('Arial', 'B', 10);
        $this->Cell(30, 7, $rata2, 0, 1);
        
        $this->Ln(8);
    }
}

// Inisialisasi PDF dengan Landscape
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();

// ============================================================
// FILTER INFORMATION
// ============================================================
$pdf->SetFont('Arial', 'B', 11);
$pdf->Cell(0, 7, 'FILTER:', 0, 1);
$pdf->SetFont('Arial', '', 10);
$pdf->Cell(0, 7, $filter_text, 0, 1);
$pdf->Ln(5);

// ============================================================
// STATISTIK
// ============================================================
$rata2 = $total > 0 ? round($total_poin / $total, 1) : 0;
$pdf->StatistikRapi($total, $aktif, $selesai, $berat, $sedang, $ringan, $total_poin, $rata2);

// ============================================================
// TABEL DATA
// ============================================================
$pdf->SetFont('Arial', 'B', 11);
$pdf->Cell(0, 7, 'DATA PELANGGARAN:', 0, 1);
$pdf->Ln(2);

$pdf->TabelRapi($pelanggaran_list);

// ============================================================
// TANDA TANGAN - DIPASTIKAN BERADA DI HALAMAN YANG SAMA
// ============================================================
// Cek apakah masih cukup ruang untuk tanda tangan
if ($pdf->GetY() > 180) { // Jika sudah melewati batas, tambah halaman baru
    $pdf->AddPage();
}

$pdf->Ln(10);

// Baris 1: Tanggal (rata kanan)
$pdf->SetX(150);
$pdf->SetFont('Arial', '', 10);
$pdf->Cell(130, 6, $tanggal_cetak, 0, 1, 'R');

$pdf->Ln(5);

// Baris 2: Mengetahui, dan Guru Piket (sejajar)
$pdf->SetX(120);
$pdf->Cell(70, 6, 'Mengetahui,', 0, 0, 'L');
$pdf->Cell(70, 6, 'Guru Piket,', 0, 1, 'C');

$pdf->Ln(15);

// Baris 3: Nama Kepala Sekolah dan Nama Guru (sejajar, underline)
$pdf->SetX(120);
$pdf->SetFont('Arial', 'BU', 11);
$pdf->Cell(70, 6, $kepala_sekolah, 0, 0, 'L');
$pdf->Cell(70, 6, $guru_nama, 0, 1, 'C');

// Baris 4: NIP (sejajar)
$pdf->SetX(120);
$pdf->SetFont('Arial', '', 10);
$pdf->Cell(70, 6, 'NIP. ' . $nip_kepala, 0, 0, 'L');
$pdf->Cell(70, 6, 'NIP. ........................', 0, 1, 'C');

// ============================================================
// OUTPUT PDF
// ============================================================
$filename = "Laporan_Semua_Pelanggaran";
if (!empty($kelas)) $filename .= "_Kelas_$kelas";
if (!empty($status)) $filename .= "_$status";
$filename .= "_" . date('Y-m-d') . ".pdf";

$pdf->Output('D', $filename);
?>