<?php
session_start();
require_once __DIR__ . '/../config/database.php';

// ------------------------------------------------------------------
// AUTH HELPERS
// ------------------------------------------------------------------
function isLoggedIn() {
    return isset($_SESSION['user_id']);
}

function requireLogin() {
    if (!isLoggedIn()) {
        header('Location: login.php');
        exit;
    }
}

function requireRole($roles = []) {
    requireLogin();
    if (!in_array($_SESSION['role'], (array)$roles)) {
        echo "<script>alert('Anda tidak memiliki akses ke halaman ini.'); window.location='index.php';</script>";
        exit;
    }
}

function currentUser() {
    return [
        'id'     => $_SESSION['user_id']   ?? null,
        'nama'   => $_SESSION['nama']      ?? '',
        'role'   => $_SESSION['role']      ?? '',
        'username' => $_SESSION['username'] ?? '',
    ];
}

// ------------------------------------------------------------------
// FORMAT HELPERS
// ------------------------------------------------------------------
function rupiah($angka) {
    return 'Rp ' . number_format((float)$angka, 0, ',', '.');
}

function tanggalIndo($tanggal, $withTime = false) {
    if (!$tanggal) return '-';
    $bulan = ['','Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember'];
    $ts = strtotime($tanggal);
    $hasil = date('d', $ts) . ' ' . $bulan[(int)date('n', $ts)] . ' ' . date('Y', $ts);
    if ($withTime) $hasil .= ', ' . date('H:i', $ts);
    return $hasil;
}

function namaBulan($bulan) {
    $bulanArr = ['','Januari','Februari','Maret','April','Mei','Juni','Juli','Agustus','September','Oktober','November','Desember'];
    return $bulanArr[(int)$bulan] ?? '-';
}

// Gabungkan nama Tingkat + Kelas tanpa duplikasi jika nama kelas sudah mengandung nama tingkat
// (contoh: tingkat "X" + kelas "X. 1" akan tampil "X. 1", bukan "X X. 1")
function formatKelasLabel($tingkatNama, $kelasNama) {
    $tingkatNama = trim((string)$tingkatNama);
    $kelasNama = trim((string)$kelasNama);
    if ($tingkatNama === '') return $kelasNama ?: '-';
    if ($kelasNama === '') return $tingkatNama;
    if (stripos($kelasNama, $tingkatNama) === 0) return $kelasNama;
    return $tingkatNama . ' ' . $kelasNama;
}

function generateNoTransaksi($pdo, $tipe) {
    $prefix = $tipe === 'pemasukan' ? 'PM' : 'PK';
    $tanggal = date('Ymd');
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM transaksi WHERE no_transaksi LIKE :pattern");
    $pattern = $prefix . '-' . $tanggal . '%';
    $stmt->execute(['pattern' => $pattern]);
    $count = $stmt->fetchColumn() + 1;
    $stmt->closeCursor();
    return $prefix . '-' . $tanggal . '-' . str_pad($count, 3, '0', STR_PAD_LEFT);
}

function flash($type, $message) {
    $_SESSION['flash'] = ['type' => $type, 'message' => $message];
}

function showFlash() {
    if (isset($_SESSION['flash'])) {
        $f = $_SESSION['flash'];
        $alertClass = $f['type'] === 'success' ? 'alert-success' : ($f['type'] === 'error' ? 'alert-danger' : 'alert-info');
        echo '<div class="alert ' . $alertClass . ' alert-dismissible fade show m-3" role="alert">'
            . htmlspecialchars($f['message'])
            . '<button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>';
        unset($_SESSION['flash']);
    }
}

// ------------------------------------------------------------------
// PENGATURAN SEKOLAH (cache sederhana per request)
// ------------------------------------------------------------------
function getPengaturan($pdo) {
    static $cache = null;
    if ($cache === null) {
        $stmt = $pdo->query("SELECT * FROM pengaturan LIMIT 1");
        $cache = $stmt->fetch();
    }
    return $cache;
}

function getTahunAjaranAktif($pdo) {
    $stmt = $pdo->query("SELECT * FROM tahun_ajaran WHERE status_aktif = 1 LIMIT 1");
    return $stmt->fetch();
}

// ------------------------------------------------------------------
// CETAK RESMI: KOP SURAT & TANDA TANGAN (dipakai di semua halaman laporan)
// ------------------------------------------------------------------
function renderKopSurat($pengaturan) {
    $logo = !empty($pengaturan['logo']) ? 'assets/uploads/logo/' . htmlspecialchars($pengaturan['logo']) : '';
    $alamatLengkap = trim(implode(', ', array_filter([
        $pengaturan['alamat'] ?? '',
        $pengaturan['kabupaten'] ?? '',
        $pengaturan['provinsi'] ?? '',
    ])));
    $kontak = trim(implode(' | ', array_filter([
        !empty($pengaturan['telp']) ? 'Telp: ' . $pengaturan['telp'] : '',
        !empty($pengaturan['email']) ? 'Email: ' . $pengaturan['email'] : '',
        !empty($pengaturan['npsn']) ? 'NPSN: ' . $pengaturan['npsn'] : '',
    ])));

    ob_start();
    ?>
    <div class="kop-surat-resmi d-none d-print-block">
        <table style="width:100%; border:none;">
            <tr>
                <?php if ($logo): ?>
                <td style="width:80px; vertical-align:middle;"><img src="<?= $logo ?>" style="height:75px;"></td>
                <?php endif; ?>
                <td style="vertical-align:middle; text-align:center;">
                    <div style="font-size:16pt; font-weight:bold; text-transform:uppercase; letter-spacing:.5px;"><?= htmlspecialchars($pengaturan['nama_sekolah'] ?? '') ?></div>
                    <?php if ($alamatLengkap): ?><div style="font-size:9.5pt;"><?= htmlspecialchars($alamatLengkap) ?></div><?php endif; ?>
                    <?php if ($kontak): ?><div style="font-size:9.5pt;"><?= htmlspecialchars($kontak) ?></div><?php endif; ?>
                </td>
                <?php if ($logo): ?><td style="width:80px;"></td><?php endif; ?>
            </tr>
        </table>
        <hr style="border-top:3px double #000; margin:6px 0 8px;">
    </div>
    <?php
    return ob_get_clean();
}

function renderTandaTanganLaporan($pengaturan, $tanggalLaporan = null) {
    $tanggalLaporan = $tanggalLaporan ?: date('Y-m-d');
    ob_start();
    ?>
    <div class="row mt-3 d-none d-print-flex tanda-tangan-resmi">
        <div class="col-6 text-center">
            <p style="margin-bottom:50px;">Mengetahui,<br>Kepala Sekolah</p>
            <p style="margin:0; text-decoration:underline; font-weight:600;"><?= htmlspecialchars($pengaturan['kepala_sekolah'] ?: '...........................') ?></p>
            <?php if (!empty($pengaturan['nip_kepala'])): ?><p style="margin:0;">NIP. <?= htmlspecialchars($pengaturan['nip_kepala']) ?></p><?php endif; ?>
        </div>
        <div class="col-6 text-center">
            <p style="margin-bottom:0;">Bekasi, <?= tanggalIndo($tanggalLaporan) ?><br>Bendahara</p>
            <p style="margin:50px 0 0;text-decoration:underline; font-weight:600;"><?= htmlspecialchars($pengaturan['bendahara'] ?: '...........................') ?></p>
            <?php if (!empty($pengaturan['nip_bendahara'])): ?><p style="margin:0;">NIP. <?= htmlspecialchars($pengaturan['nip_bendahara']) ?></p><?php endif; ?>
        </div>
    </div>
    <?php
    return ob_get_clean();
}