<?php
require_once __DIR__ . '/includes/functions.php';
requireLogin();
$pageTitle = 'Naik & Pindah Kelas';

$kelasList = $pdo->query("SELECT k.*, t.nama as tingkat_nama, t.id as tingkat_id FROM kelas k JOIN tingkat t ON t.id=k.tingkat_id ORDER BY t.nama, k.nama")->fetchAll();
$tingkatList = $pdo->query("SELECT * FROM tingkat ORDER BY nama")->fetchAll();

// ------------------------------------------------------------------
// PROSES NAIK KELAS MASSAL
// ------------------------------------------------------------------
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'naik_kelas') {
    $dariKelasId  = $_POST['dari_kelas_id'];
    $keKelasId    = $_POST['ke_kelas_id'];
    $siswaIds     = $_POST['siswa_ids'] ?? [];
    $statusLulus  = isset($_POST['status_lulus']); // kalau kelas tertinggi, tandai lulus

    if (empty($siswaIds)) {
        flash('error', 'Pilih minimal satu siswa.');
        header('Location: naik_pindah_kelas.php');
        exit;
    }

    $berhasil = 0;
    foreach ($siswaIds as $sid) {
        if ($statusLulus) {
            $pdo->prepare("UPDATE siswa SET status='lulus', kelas_id=NULL WHERE id=:id")->execute(['id'=>$sid]);
        } else {
            $pdo->prepare("UPDATE siswa SET kelas_id=:kelas WHERE id=:id")->execute(['kelas'=>$keKelasId, 'id'=>$sid]);
        }
        $berhasil++;
    }

    $pesanAksi = $statusLulus ? "ditetapkan status LULUS" : "dipindah ke kelas " . (array_column($kelasList, 'nama', 'id')[$keKelasId] ?? '-');
    flash('success', "$berhasil siswa berhasil $pesanAksi.");
    header('Location: naik_pindah_kelas.php');
    exit;
}

// ------------------------------------------------------------------
// PROSES PINDAH KELAS INDIVIDUAL
// ------------------------------------------------------------------
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'pindah_kelas') {
    $siswaId  = $_POST['siswa_id'];
    $kelasId  = $_POST['kelas_id_tujuan'];

    $pdo->prepare("UPDATE siswa SET kelas_id=:kelas WHERE id=:id")->execute(['kelas'=>$kelasId, 'id'=>$siswaId]);
    flash('success', 'Kelas siswa berhasil diubah.');
    header('Location: naik_pindah_kelas.php?tab=pindah');
    exit;
}

// Data daftar siswa per kelas untuk tab Naik Kelas
$dariKelasId = $_GET['dari_kelas_id'] ?? '';
$siswaKelas = [];
if ($dariKelasId) {
    $stmt = $pdo->prepare("SELECT s.*, k.nama as kelas_nama, t.nama as tingkat_nama FROM siswa s LEFT JOIN kelas k ON k.id=s.kelas_id LEFT JOIN tingkat t ON t.id=k.tingkat_id WHERE s.kelas_id=:id AND s.status='aktif' ORDER BY s.nama");
    $stmt->execute(['id' => $dariKelasId]);
    $siswaKelas = $stmt->fetchAll();
}

// Cari kelas tujuan default (kelas berikutnya di tingkat yang lebih tinggi)
$dariKelas = null;
$kelasTujuanDefault = '';
foreach ($kelasList as $kl) {
    if ($kl['id'] == $dariKelasId) { $dariKelas = $kl; break; }
}

$kelasTujuanList = [];
$isKelasTertinggi = false;
if ($dariKelas) {
    // Cari semua kelas di tingkat lebih tinggi berikutnya
    $tingkatNamaUrut = array_column($tingkatList, 'nama');
    sort($tingkatNamaUrut);
    $idxTingkatSaatIni = array_search($dariKelas['tingkat_nama'], $tingkatNamaUrut);
    if ($idxTingkatSaatIni !== false && $idxTingkatSaatIni < count($tingkatNamaUrut) - 1) {
        $tingkatTujuanNama = $tingkatNamaUrut[$idxTingkatSaatIni + 1];
        foreach ($kelasList as $kl) {
            if ($kl['tingkat_nama'] === $tingkatTujuanNama) {
                $kelasTujuanList[] = $kl;
            }
        }
    } else {
        $isKelasTertinggi = true; // tingkat tertinggi → opsi tandai lulus
    }
}

// Cari siswa untuk pindah kelas
$searchPindah = $_GET['qp'] ?? '';
$daftarSiswaPindah = [];
$siswaPindahTerpilih = null;
if (!empty($_GET['siswa_pindah_id'])) {
    $stmt = $pdo->prepare("SELECT s.*, k.nama as kelas_nama, t.nama as tingkat_nama FROM siswa s LEFT JOIN kelas k ON k.id=s.kelas_id LEFT JOIN tingkat t ON t.id=k.tingkat_id WHERE s.id=:id");
    $stmt->execute(['id' => $_GET['siswa_pindah_id']]);
    $siswaPindahTerpilih = $stmt->fetch();
}
if ($searchPindah) {
    $stmt = $pdo->prepare("SELECT s.*, k.nama as kelas_nama, t.nama as tingkat_nama FROM siswa s LEFT JOIN kelas k ON k.id=s.kelas_id LEFT JOIN tingkat t ON t.id=k.tingkat_id WHERE s.nama LIKE :q1 OR s.nis LIKE :q2 ORDER BY s.nama LIMIT 15");
    $stmt->execute(['q1' => '%'.$searchPindah.'%', 'q2' => '%'.$searchPindah.'%']);
    $daftarSiswaPindah = $stmt->fetchAll();
}

$tabAktif = $_GET['tab'] ?? 'naik';

include __DIR__ . '/includes/header.php';
include __DIR__ . '/includes/sidebar.php';
?>

<h5 class="mb-3">Naik Kelas &amp; Pindah Kelas</h5>

<ul class="nav nav-tabs mb-3">
    <li class="nav-item"><a class="nav-link <?= $tabAktif==='naik'?'active':'' ?>" href="naik_pindah_kelas.php?tab=naik">Naik Kelas (Massal)</a></li>
    <li class="nav-item"><a class="nav-link <?= $tabAktif==='pindah'?'active':'' ?>" href="naik_pindah_kelas.php?tab=pindah">Pindah Kelas (Individual)</a></li>
</ul>

<?php if ($tabAktif === 'naik'): ?>
<!-- ============================================================ -->
<!-- TAB NAIK KELAS MASSAL -->
<!-- ============================================================ -->
<div class="alert alert-info py-2"><i class="bi bi-info-circle"></i> Pilih kelas asal, centang siswa yang naik kelas, lalu tentukan kelas tujuan. Untuk tingkat tertinggi (XII), siswa bisa langsung ditandai <strong>Lulus</strong>.</div>

<div class="card mb-3">
    <div class="card-body">
        <form method="GET" class="row g-2 align-items-end">
            <input type="hidden" name="tab" value="naik">
            <div class="col-md-5">
                <label class="form-label">Pilih Kelas Asal</label>
                <select name="dari_kelas_id" class="form-select" onchange="this.form.submit()">
                    <option value="">-- Pilih Kelas --</option>
                    <?php foreach ($kelasList as $kl): ?>
                        <option value="<?= $kl['id'] ?>" <?= $dariKelasId==$kl['id']?'selected':'' ?>>
                            <?= htmlspecialchars(formatKelasLabel($kl['tingkat_nama'], $kl['nama'])) ?>
                        </option>
                    <?php endforeach; ?>
                </select>
            </div>
        </form>
    </div>
</div>

<?php if ($dariKelasId && !empty($siswaKelas)): ?>
<form method="POST">
    <input type="hidden" name="action" value="naik_kelas">
    <input type="hidden" name="dari_kelas_id" value="<?= $dariKelasId ?>">

    <div class="card">
        <div class="card-header d-flex justify-content-between align-items-center">
            <span>Siswa di Kelas <?= htmlspecialchars(formatKelasLabel($dariKelas['tingkat_nama'] ?? '', $dariKelas['nama'] ?? '')) ?> (<?= count($siswaKelas) ?> siswa aktif)</span>
        </div>
        <div class="card-body">
            <div class="row mb-3">
                <?php if ($isKelasTertinggi): ?>
                <div class="col-md-6">
                    <div class="alert alert-warning mb-0">
                        <i class="bi bi-mortarboard"></i> Ini adalah tingkat tertinggi.
                        <div class="form-check mt-2">
                            <input type="checkbox" name="status_lulus" id="chkLulus" class="form-check-input" value="1">
                            <label class="form-check-label" for="chkLulus"><strong>Tandai siswa terpilih sebagai LULUS</strong> (kelas dikosongkan)</label>
                        </div>
                    </div>
                </div>
                <?php else: ?>
                <div class="col-md-6">
                    <label class="form-label fw-semibold">Kelas Tujuan (Naik ke)</label>
                    <select name="ke_kelas_id" class="form-select" required>
                        <option value="">-- Pilih Kelas Tujuan --</option>
                        <?php foreach ($kelasTujuanList as $kl): ?>
                            <option value="<?= $kl['id'] ?>"><?= htmlspecialchars(formatKelasLabel($kl['tingkat_nama'], $kl['nama'])) ?></option>
                        <?php endforeach; ?>
                    </select>
                    <small class="text-muted">Menampilkan kelas di tingkat <?= isset($tingkatNamaUrut[$idxTingkatSaatIni + 1]) ? $tingkatNamaUrut[$idxTingkatSaatIni + 1] : '' ?></small>
                </div>
                <?php endif; ?>
            </div>

            <table class="table table-hover">
                <thead>
                    <tr>
                        <th width="40"><input type="checkbox" id="chkAll" checked onclick="document.querySelectorAll('.chk-siswa').forEach(c=>c.checked=this.checked)"></th>
                        <th>NIS</th><th>Nama</th><th>Kelas Saat Ini</th>
                    </tr>
                </thead>
                <tbody>
                <?php foreach ($siswaKelas as $s): ?>
                    <tr>
                        <td><input type="checkbox" class="chk-siswa" name="siswa_ids[]" value="<?= $s['id'] ?>" checked></td>
                        <td><?= htmlspecialchars($s['nis']) ?></td>
                        <td><?= htmlspecialchars($s['nama']) ?></td>
                        <td><?= htmlspecialchars(formatKelasLabel($s['tingkat_nama'] ?? '', $s['kelas_nama'] ?? '')) ?></td>
                    </tr>
                <?php endforeach; ?>
                </tbody>
            </table>
            <button class="btn btn-primary" onclick="return confirm('Yakin ingin memproses naik kelas/kelulusan siswa yang dipilih?')">
                <i class="bi bi-arrow-up-circle"></i> Proses Naik Kelas
            </button>
        </div>
    </div>
</form>
<?php elseif ($dariKelasId): ?>
    <div class="card"><div class="card-body text-center text-muted py-4">Tidak ada siswa aktif di kelas ini.</div></div>
<?php endif; ?>

<?php else: ?>
<!-- ============================================================ -->
<!-- TAB PINDAH KELAS INDIVIDUAL -->
<!-- ============================================================ -->
<div class="card mb-3">
    <div class="card-body">
        <form method="GET" class="row g-2" id="formCariPindah">
            <input type="hidden" name="tab" value="pindah">
            <div class="col-md-8">
                <input type="text" name="qp" class="form-control" placeholder="Cari nama siswa atau NIS..." value="<?= htmlspecialchars($searchPindah) ?>">
            </div>
            <div class="col-md-2"><button class="btn btn-primary w-100"><i class="bi bi-search"></i> Cari</button></div>
        </form>

        <?php if ($daftarSiswaPindah): ?>
        <table class="table table-hover mt-3">
            <thead><tr><th>NIS</th><th>Nama</th><th>Kelas Saat Ini</th><th></th></tr></thead>
            <tbody>
            <?php foreach ($daftarSiswaPindah as $s): ?>
                <tr>
                    <td><?= htmlspecialchars($s['nis']) ?></td>
                    <td><?= htmlspecialchars($s['nama']) ?></td>
                    <td><?= htmlspecialchars(formatKelasLabel($s['tingkat_nama'] ?? '', $s['kelas_nama'] ?? '')) ?: '-' ?></td>
                    <td><a href="naik_pindah_kelas.php?tab=pindah&siswa_pindah_id=<?= $s['id'] ?>&qp=<?= urlencode($searchPindah) ?>" class="btn btn-sm btn-outline-primary">Pindahkan</a></td>
                </tr>
            <?php endforeach; ?>
            </tbody>
        </table>
        <?php elseif ($searchPindah): ?>
            <p class="text-muted mt-3 mb-0">Tidak ada siswa yang cocok.</p>
        <?php endif; ?>
    </div>
</div>

<?php if ($siswaPindahTerpilih): ?>
<div class="card">
    <div class="card-header">
        Pindah Kelas — <?= htmlspecialchars($siswaPindahTerpilih['nama']) ?> (<?= htmlspecialchars($siswaPindahTerpilih['nis']) ?>)
    </div>
    <div class="card-body">
        <p class="text-muted">Kelas saat ini: <strong><?= htmlspecialchars(formatKelasLabel($siswaPindahTerpilih['tingkat_nama'] ?? '', $siswaPindahTerpilih['kelas_nama'] ?? '')) ?: '-' ?></strong></p>
        <form method="POST" class="row g-3">
            <input type="hidden" name="action" value="pindah_kelas">
            <input type="hidden" name="siswa_id" value="<?= $siswaPindahTerpilih['id'] ?>">
            <div class="col-md-5">
                <label class="form-label">Kelas Tujuan</label>
                <select name="kelas_id_tujuan" class="form-select" required>
                    <option value="">-- Pilih Kelas Tujuan --</option>
                    <?php foreach ($kelasList as $kl): ?>
                        <option value="<?= $kl['id'] ?>" <?= $kl['id']==$siswaPindahTerpilih['kelas_id']?'disabled':'' ?>>
                            <?= htmlspecialchars(formatKelasLabel($kl['tingkat_nama'], $kl['nama'])) ?>
                            <?= $kl['id']==$siswaPindahTerpilih['kelas_id'] ? '(kelas saat ini)' : '' ?>
                        </option>
                    <?php endforeach; ?>
                </select>
            </div>
            <div class="col-md-3 d-flex align-items-end">
                <button class="btn btn-primary w-100"><i class="bi bi-arrow-left-right"></i> Pindahkan</button>
            </div>
        </form>
    </div>
</div>
<?php endif; ?>

<?php endif; ?>

<?php include __DIR__ . '/includes/footer.php'; ?>