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

include 'config.php';
require 'fpdf/fpdf.php';

// Ambil data profil sekolah
$profil = mysqli_fetch_assoc(mysqli_query($conn, "SELECT logo, nama_sekolah, alamat FROM profil_sekolah LIMIT 1"));
$logo_path = null;
if ($profil && !empty($profil['logo'])) {
    $logo_path = __DIR__ . '/uploads/' . $profil['logo'];
}
$nama_sekolah = $profil['nama_sekolah'] ?? '';
$alamat_sekolah = $profil['alamat'] ?? '';

// Ambil data siswa urutkan berdasarkan kelas dan nama
$result = mysqli_query($conn, "SELECT *, 
                              CASE 
                                  WHEN foto IS NOT NULL AND foto != '' AND foto LIKE 'uploads/%' THEN foto
                                  ELSE NULL 
                              END as foto_path 
                              FROM siswa 
                              ORDER BY kelas ASC, nama ASC");

class PDF extends FPDF
{
    public $logo_path;
    public $nama_sekolah;
    public $alamat_sekolah;

    function Footer()
    {
        $this->SetY(-15);
        $this->SetFont('Arial', 'I', 8);
        $this->SetTextColor(100, 100, 100);
        $this->Cell(0, 10, 'Dicetak pada: ' . date('d/m/Y H:i') . ' | Viralytics_Shop', 0, 0, 'C');
    }
    
    // Function untuk menambahkan image dari URL
    function ImageFromUrl($url, $x, $y, $w, $h)
    {
        // Download gambar dari URL
        $imageContent = @file_get_contents($url);
        if ($imageContent === false) {
            return false;
        }
        
        // Simpan sementara
        $tempFile = tempnam(sys_get_temp_dir(), 'qr');
        file_put_contents($tempFile, $imageContent);
        
        // Tambahkan gambar ke PDF
        $this->Image($tempFile, $x, $y, $w, $h);
        
        // Hapus file temporary
        unlink($tempFile);
        
        return true;
    }
    
    // Function untuk menambahkan gambar dengan placeholder jika tidak ada
    function ImageWithPlaceholder($file_path, $x, $y, $w, $h, $nama, $nis)
    {
        if (!empty($file_path) && file_exists($file_path)) {
            // Coba tampilkan foto siswa
            try {
                $this->Image($file_path, $x, $y, $w, $h);
                return true;
            } catch (Exception $e) {
                // Jika gagal, tampilkan placeholder
                $this->DrawPhotoPlaceholder($x, $y, $w, $h, $nama, $nis);
                return false;
            }
        } else {
            // Tampilkan placeholder jika tidak ada foto
            $this->DrawPhotoPlaceholder($x, $y, $w, $h, $nama, $nis);
            return false;
        }
    }
    
    // Function untuk menggambar placeholder foto
    function DrawPhotoPlaceholder($x, $y, $w, $h, $nama, $nis)
    {
        // Gambar kotak untuk foto
        $this->SetDrawColor(200, 200, 200);
        $this->SetFillColor(240, 240, 240);
        $this->RoundedRect($x, $y, $w, $h, 3, 'FD');
        
        // Garis silang di tengah
        $this->SetDrawColor(180, 180, 180);
        $this->Line($x + $w/2, $y + 3, $x + $w/2, $y + $h - 3);
        $this->Line($x + 3, $y + $h/2, $x + $w - 3, $y + $h/2);
        
        // Teks placeholder
        $this->SetXY($x, $y + $h - 8);
        $this->SetFont('Arial', 'B', 6);
        $this->SetTextColor(120, 120, 120);
        $this->Cell($w, 4, 'FOTO SISWA', 0, 0, 'C');
    }
    
    // Function untuk membuat rounded rectangle
    function RoundedRect($x, $y, $w, $h, $r, $style = '')
    {
        $k = $this->k;
        $hp = $this->h;
        if($style=='F')
            $op='f';
        elseif($style=='FD' || $style=='DF')
            $op='B';
        else
            $op='S';
        $MyArc = 4/3 * (sqrt(2) - 1);
        $this->_out(sprintf('%.2F %.2F m',($x+$r)*$k,($hp-$y)*$k ));
        $xc = $x+$w-$r ;
        $yc = $y+$r;
        $this->_out(sprintf('%.2F %.2F l', $xc*$k,($hp-$y)*$k ));
        $this->_Arc($xc + $r*$MyArc, $yc - $r, $xc + $r, $yc - $r*$MyArc, $xc + $r, $yc);
        $xc = $x+$w-$r ;
        $yc = $y+$h-$r;
        $this->_out(sprintf('%.2F %.2F l',($x+$w)*$k,($hp-$yc)*$k));
        $this->_Arc($xc + $r, $yc + $r*$MyArc, $xc + $r*$MyArc, $yc + $r, $xc, $yc + $r);
        $xc = $x+$r;
        $yc = $y+$h-$r;
        $this->_out(sprintf('%.2F %.2F l',$xc*$k,($hp-($y+$h))*$k));
        $this->_Arc($xc - $r*$MyArc, $yc + $r, $xc - $r, $yc + $r*$MyArc, $xc - $r, $yc);
        $xc = $x+$r ;
        $yc = $y+$r;
        $this->_out(sprintf('%.2F %.2F l',($x)*$k,($hp-$yc)*$k ));
        $this->_Arc($xc - $r, $yc - $r*$MyArc, $xc - $r*$MyArc, $yc - $r, $xc, $yc - $r);
        $this->_out($op);
    }
    
    function _Arc($x1, $y1, $x2, $y2, $x3, $y3)
    {
        $h = $this->h;
        $this->_out(sprintf('%.2F %.2F %.2F %.2F %.2F %.2F c ', $x1*$this->k, ($h-$y1)*$this->k,
            $x2*$this->k, ($h-$y2)*$this->k, $x3*$this->k, ($h-$y3)*$this->k));
    }
}

$pdf = new PDF('P', 'mm', 'A4');
$pdf->logo_path = $logo_path;
$pdf->nama_sekolah = $nama_sekolah;
$pdf->alamat_sekolah = $alamat_sekolah;
$pdf->SetAutoPageBreak(false);

$card_width = 95;
$card_height = 75; // Tinggi kartu ditambah untuk foto dan layout yang lebih baik
$margin_x = 7;
$margin_y = 10;
$spacing_x = 5;
$spacing_y = 5;

$x = $margin_x;
$y = $margin_y;
$count = 0;

while ($data = mysqli_fetch_assoc($result)) {
    if ($count % 6 == 0) {
        $pdf->AddPage();
        $x = $margin_x;
        $y = $margin_y;
    }

    // Bingkai kartu dengan rounded corners
    $pdf->SetDrawColor(100, 100, 100);
    $pdf->RoundedRect($x, $y, $card_width, $card_height, 3);

    // Logo sekolah
    if ($logo_path && file_exists($logo_path)) {
        $pdf->Image($logo_path, $x + 2, $y + 2, 10, 10);
    }

    // Judul + Nama sekolah
    $pdf->SetXY($x + 14, $y + 2);
    $pdf->SetFont('Arial', 'B', 9);
    $pdf->SetTextColor(0, 0, 0);
    $pdf->Cell(0, 5, 'KARTU PELAJAR DIGITAL', 0, 1);

    $pdf->SetX($x + 14);
    $pdf->SetFont('Arial', 'B', 7);
    $pdf->SetTextColor(40, 40, 40);
    $pdf->Cell(0, 4, $nama_sekolah, 0, 1);

    $pdf->SetX($x + 14);
    $pdf->SetFont('Arial', '', 6);
    $pdf->SetTextColor(80, 80, 80);
    $pdf->MultiCell(40, 3, $alamat_sekolah);

    // Garis pemisah header
    $pdf->SetDrawColor(200, 200, 200);
    $pdf->Line($x + 2, $y + 16, $x + $card_width - 2, $y + 16);

    // Area foto siswa (20x25 mm)
    $foto_x = $x + 5;
    $foto_y = $y + 19;
    $foto_w = 20;
    $foto_h = 25;
    
    // Tampilkan foto siswa atau placeholder
    $foto_path = !empty($data['foto_path']) ? __DIR__ . '/' . $data['foto_path'] : null;
    $pdf->ImageWithPlaceholder($foto_path, $foto_x, $foto_y, $foto_w, $foto_h, $data['nama'], $data['nis']);
    
    // Label di bawah foto
    $pdf->SetXY($foto_x, $foto_y + $foto_h + 1);
    $pdf->SetFont('Arial', '', 5);
    $pdf->SetTextColor(100, 100, 100);
    $pdf->Cell($foto_w, 2, 'Foto Resmi', 0, 0, 'C');

    // Area data siswa (di sebelah kanan foto)
    $data_x = $foto_x + $foto_w + 3;
    $data_y = $foto_y;
    
    // Nama siswa (lebih menonjol)
    $pdf->SetXY($data_x, $data_y);
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->SetTextColor(0, 0, 0);
    $pdf->Cell($card_width - $data_x - 5, 5, substr($data['nama'], 0, 20), 0, 1);
    
    // Garis bawah nama
    $pdf->SetDrawColor(200, 200, 200);
    $pdf->Line($data_x, $data_y + 5, $data_x + 55, $data_y + 5);
    
    // Data detail siswa
    $pdf->SetXY($data_x, $data_y + 7);
    $pdf->SetFont('Arial', '', 8);
    $pdf->SetTextColor(60, 60, 60);
    
    // NIS
    $pdf->Cell(15, 4, 'NIS:', 0, 0);
    $pdf->SetFont('Arial', 'B', 8);
    $pdf->Cell(30, 4, $data['nis'], 0, 1);
    
    // NISN
    $pdf->SetX($data_x);
    $pdf->SetFont('Arial', '', 8);
    $pdf->Cell(15, 4, 'NISN:', 0, 0);
    $pdf->SetFont('Arial', 'B', 8);
    $pdf->Cell(30, 4, $data['nisn'], 0, 1);
    
    // Kelas
    $pdf->SetX($data_x);
    $pdf->SetFont('Arial', '', 8);
    $pdf->Cell(15, 4, 'Kelas:', 0, 0);
    $pdf->SetFont('Arial', 'B', 8);
    $pdf->Cell(30, 4, $data['kelas'], 0, 1);
    
    // No WhatsApp (jika ada)
    if (!empty($data['no_wa'])) {
        $pdf->SetX($data_x);
        $pdf->SetFont('Arial', '', 8);
        $pdf->Cell(15, 4, 'WA:', 0, 0);
        $pdf->SetFont('Arial', '', 7);
        $pdf->SetTextColor(0, 100, 0);
        $pdf->Cell(30, 4, $data['no_wa'], 0, 1);
    }

    // QR Code untuk siswa - menggunakan data NISN
    $qr_data = $data['nisn'];
    
    // Ukuran barcode (25x25 mm) - lebih kecil karena ada foto
    $qr_size = 25;
    $qr_x = $x + $card_width - $qr_size - 5;
    $qr_y = $y + $card_height - $qr_size - 10;
    
    // Border untuk QR Code
    $pdf->SetDrawColor(220, 220, 220);
    $pdf->Rect($qr_x - 1, $qr_y - 1, $qr_size + 2, $qr_size + 2);
    
    $qr_file = "assets/qr/" . $data['nisn'] . ".png";
    
    if (file_exists($qr_file)) {
        // Jika file QR code sudah ada, gunakan yang sudah ada
        $pdf->Image($qr_file, $qr_x, $qr_y, $qr_size, $qr_size);
    } else {
        // Jika tidak ada, generate menggunakan Google Charts API
        $qr_url = "https://chart.googleapis.com/chart?cht=qr&chs=200x200&chl=" . urlencode($qr_data);
        
        // Tampilkan QR code
        $qr_success = $pdf->ImageFromUrl($qr_url, $qr_x, $qr_y, $qr_size, $qr_size);
        
        // Jika gagal load QR code, tampilkan placeholder
        if (!$qr_success) {
            $pdf->SetDrawColor(200, 200, 200);
            $pdf->SetFillColor(240, 240, 240);
            $pdf->Rect($qr_x, $qr_y, $qr_size, $qr_size, 'F');
            
            $pdf->SetXY($qr_x, $qr_y + $qr_size/2 - 3);
            $pdf->SetFont('Arial', 'B', 6);
            $pdf->SetTextColor(150, 150, 150);
            $pdf->Cell($qr_size, 5, 'QR CODE', 0, 0, 'C');
        }
    }

    // Label QR Code
    $pdf->SetXY($qr_x, $qr_y + $qr_size + 1);
    $pdf->SetFont('Arial', '', 5);
    $pdf->SetTextColor(100, 100, 100);
    $pdf->Cell($qr_size, 2, 'SCAN ABSENSI', 0, 0, 'C');

    // Posisi kartu berikutnya
    if ($x + $card_width + $spacing_x > 210 - $margin_x) {
        $x = $margin_x;
        $y += $card_height + $spacing_y;
    } else {
        $x += $card_width + $spacing_x;
    }

    $count++;
}

// Tambahkan halaman instruksi jika ada siswa
if (mysqli_num_rows(mysqli_query($conn, "SELECT id FROM siswa WHERE status='aktif'")) > 0) {
    $pdf->AddPage();
    
    // Header instruksi
    $pdf->SetFont('Arial', 'B', 14);
    $pdf->SetTextColor(0, 0, 0);
    $pdf->Cell(0, 10, 'PETUNJUK PENGGUNAAN KARTU PELAJAR', 0, 1, 'C');
    
    $pdf->Ln(5);
    
    // Informasi sekolah
    $pdf->SetFont('Arial', 'B', 12);
    $pdf->Cell(0, 8, $nama_sekolah, 0, 1, 'C');
    
    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(0, 6, $alamat_sekolah, 0, 1, 'C');
    
    $pdf->Ln(10);
    
    // Instruksi penggunaan
    $instruksi = array(
        "1. Kartu ini harus dibawa setiap hari ke sekolah",
        "2. QR Code digunakan untuk absensi masuk dan pulang",
        "3. Tempelkan kartu di tempat yang mudah dilihat",
        "4. Jaga kartu dari kerusakan dan kehilangan",
        "5. Laporkan segera jika kartu hilang atau rusak",
        "6. Kartu hanya berlaku untuk pemilik yang terdaftar"
    );
    
    $pdf->SetFont('Arial', '', 11);
    $pdf->SetLeftMargin(20);
    
    foreach ($instruksi as $item) {
        $pdf->Cell(0, 8, $item, 0, 1);
    }
    
    $pdf->Ln(15);
    
    // Informasi penting
    $pdf->SetFont('Arial', 'B', 11);
    $pdf->SetTextColor(200, 0, 0);
    $pdf->Cell(0, 8, 'PERHATIAN:', 0, 1);
    
    $pdf->SetFont('Arial', '', 10);
    $pdf->SetTextColor(0, 0, 0);
    $pdf->MultiCell(0, 6, 'Kartu ini adalah dokumen resmi sekolah. Penggunaan oleh orang lain selain pemilik akan dikenai sanksi sesuai peraturan sekolah.');
    
    $pdf->Ln(10);
    
    // Tanggal berlaku
    $pdf->SetFont('Arial', 'I', 10);
    $pdf->Cell(0, 8, 'Kartu berlaku sampai dengan: ' . date('d/m/Y', strtotime('+1 year')), 0, 1, 'C');
}

$pdf->Output('I', 'kartu_pelajar_' . date('Ymd_His') . '.pdf');