<?php
$page_title = 'ข้อมูลนักศึกษา';
require_once __DIR__ . '/../includes/functions.php';
require_once __DIR__ . '/../includes/header.php';

$id = intval($_GET['id'] ?? 0);
requireStudentAccess($id);
$student = getStudent($id);
if (!$student) {
    echo '<div class="alert alert-danger">ไม่พบข้อมูลนักศึกษา</div>';
    require_once __DIR__ . '/../includes/footer.php';
    exit;
}

if (isset($_GET['added'])) {
    $msg_class = 'success';
    $msg_text = 'เพิ่มรายวิชาเรียบร้อยแล้ว';
    if ($_GET['added'] === '0') $msg_text = 'ไม่พบรายวิชาใหม่จากไฟล์ (อาจซ้ำหรือไม่ตรงหลักสูตร)';
    echo "<div class='alert alert-$msg_class alert-dismissible fade show'>$msg_text<button type='button' class='btn-close' data-bs-dismiss='alert'></button></div>";
}
if (isset($_GET['error'])) {
    $err = $_GET['error'];
    $map = ['upload_failed' => 'อัปโหลดไฟล์ล้มเหลว', 'no_text' => 'ไม่พบข้อความในไฟล์ PDF', 'invalid_data' => 'ข้อมูลไม่ถูกต้อง'];
    $txt = $map[$err] ?? $err;
    echo "<div class='alert alert-danger alert-dismissible fade show'>$txt<button type='button' class='btn-close' data-bs-dismiss='alert'></button></div>";
}

$summary = getStudentSummary($id);
$student_courses = getStudentCourses($id);

// เรียง: ลงเรียนปกติ+ยังไม่ออกเกรด → เทียบโอน/ออกเกรดแล้ว
usort($student_courses, function($a, $b) {
    $isUngraded = fn($r) => $r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0;
    $a_ungraded = $isUngraded($a);
    $b_ungraded = $isUngraded($b);
    if ($a_ungraded && !$b_ungraded) return -1;
    if (!$a_ungraded && $b_ungraded) return 1;
    return strcasecmp($a['course_code'], $b['course_code']);
});

$total_curriculum_credits = getTotalCurriculumCredits($student['curriculum_id']);
$total_completed = getCompletedCreditsTotal($id);
$transfer_credits = getTransferCreditsTotal($id);
$remaining_credits = max(0, $total_curriculum_credits - $total_completed);
$is_dbc = ($student['curriculum_code'] == 'DBC');
?>
<div class="page-heading">
    <div>
        <h4><i class="bi bi-person-vcard"></i> <?= htmlspecialchars($student['student_code']) ?> - <?= htmlspecialchars($student['name_th']) ?></h4>
        <div class="text-muted small"><?= htmlspecialchars($student['curriculum_code']) ?> - <?= htmlspecialchars($student['curriculum_name']) ?></div>
    </div>
    <div class="action-buttons">
        <?php if (!isStudent() || getCurrentUserId() == $id): ?>
        <a href="edit.php?id=<?= $id ?>" class="btn btn-warning btn-sm"><i class="bi bi-pencil"></i> แก้ไข</a>
        <?php endif; ?>
        <a href="<?= BASE_URL ?>/reports/transfer_report.php?student_id=<?= $id ?>" class="btn btn-dark btn-sm" target="_blank"><i class="bi bi-file-earmark-text"></i> ผลการประเมินเทียบโอน</a>
        <a href="<?= BASE_URL ?>/reports/print_summary.php?student_id=<?= $id ?>" class="btn btn-primary btn-sm" target="_blank"><i class="bi bi-printer"></i> พิมพ์สรุปผล</a>
    </div>
</div>

<div class="row mb-4">
    <div class="col-md-8">
        <div class="card">
            <div class="card-header bg-info text-white d-flex justify-content-between align-items-center">
                <h4 class="mb-0"><i class="bi bi-person-vcard"></i> ข้อมูลนักศึกษา</h4>
            </div>
            <div class="card-body">
                <table class="table table-sm table-borderless">
                    <tr><td style="width:180px;"><strong>รหัสนักศึกษา:</strong></td><td><?= htmlspecialchars($student['student_code']) ?></td></tr>
                    <tr><td><strong>ชื่อ-นามสกุล:</strong></td><td><?= htmlspecialchars($student['name_th']) ?> (<?= htmlspecialchars($student['name_en']) ?>)</td></tr>
                    <tr><td><strong>อีเมล:</strong></td><td><?= htmlspecialchars($student['email'] ?? '-') ?></td></tr>
                    <tr><td><strong>สาขาวิชา:</strong></td><td><span class="badge bg-<?= $is_dbc ? 'success' : 'primary' ?> fs-6"><?= htmlspecialchars($student['curriculum_code']) ?> - <?= htmlspecialchars($student['curriculum_name']) ?></span></td></tr>
                    <tr><td><strong>คณะ:</strong></td><td><?= htmlspecialchars($student['faculty'] ?: '-') ?></td></tr>
                    <tr><td><strong>สถาบันที่จบ:</strong></td><td><?= htmlspecialchars($student['graduated_institution'] ?: '-') ?></td></tr>
                    <tr><td><strong>วุฒิเดิม:</strong></td><td><?= htmlspecialchars($student['previous_qualification'] ?: '-') ?></td></tr>
                    <tr><td><strong>ปีการศึกษาที่เข้าศึกษา:</strong></td><td><?= $student['enrollment_year'] ?></td></tr>
                </table>
            </div>
        </div>
    </div>
    <div class="col-md-4">
        <div class="card stat-card mb-3"><div class="card-body">
            <span class="stat-icon"><i class="bi bi-arrow-left-right"></i></span>
            <div class="stat-label">หน่วยกิตที่เทียบโอนได้</div>
            <div class="stat-value"><?= $transfer_credits ?></div>
        </div></div>
        <div class="card stat-card mb-3"><div class="card-body">
            <span class="stat-icon"><i class="bi bi-check2-circle"></i></span>
            <div class="stat-label">หน่วยกิตที่เรียนผ่านแล้วทั้งหมด</div>
            <div class="stat-value"><?= $total_completed ?></div>
        </div></div>
        <div class="card stat-card"><div class="card-body">
            <span class="stat-icon"><i class="bi bi-mortarboard"></i></span>
            <div class="stat-label">หน่วยกิตที่ต้องเรียนอีก</div>
            <div class="stat-value"><?= $remaining_credits ?> / <?= $total_curriculum_credits ?></div>
            <div class="progress mt-2" style="height: 12px;">
                <div class="progress-bar bg-success" style="width: <?= min(100, ($total_completed / $total_curriculum_credits) * 100) ?>%">
                    <?= $total_curriculum_credits > 0 ? round(($total_completed / $total_curriculum_credits) * 100) : 0 ?>%
                </div>
            </div>
        </div></div>
    </div>
</div>

<div class="row">
    <div class="col-md-7">
        <div class="card">
            <div class="card-header bg-<?= $is_dbc ? 'success' : 'primary' ?> text-white">
                <h5 class="mb-0"><i class="bi bi-journal-text"></i> รายวิชาตามหลักสูตร</h5>
            </div>
            <div class="card-body" style="max-height: 650px; overflow-y: auto;">
                <div class="small text-muted mb-2">
                    <span class="badge bg-success"><i class="bi bi-check-circle"></i> เรียนแล้ว</span>
                    <span class="badge bg-warning text-dark"><i class="bi bi-check-circle"></i> เทียบโอน</span>
                    <span class="badge bg-secondary">ยังไม่เรียน</span>
                </div>
                <?php renderStudentTree($summary['groups']); ?>
            </div>
        </div>
    </div>
    <div class="col-md-5">
        <?php if (!isStudent()): ?>
        <div class="card mb-3 border-warning">
            <div class="card-header bg-warning">
                <h5 class="mb-0"><i class="bi bi-upload"></i> นำเข้าข้อมูลเทียบโอน (PDF)</h5>
            </div>
            <div class="card-body">
                <form action="<?= BASE_URL ?>/api/upload_pdf.php" method="POST" enctype="multipart/form-data" class="mb-2">
                    <input type="hidden" name="student_id" value="<?= $id ?>">
                    <div class="mb-2">
                        <label class="form-label">เลือกไฟล์ PDF รายวิชาที่เทียบโอน</label>
                        <input type="file" name="pdf_file" class="form-control" accept=".pdf" required>
                    </div>
                    <button type="submit" class="btn btn-warning"><i class="bi bi-cloud-upload"></i> อัปโหลดและวิเคราะห์</button>
                </form>
                <div class="alert alert-info small mb-0">
                    <i class="bi bi-info-circle"></i> ระบบจะอ่านรหัสวิชา ชื่อวิชา และหน่วยกิตจากไฟล์ PDF โดยอัตโนมัติ เฉพาะรายวิชาที่เทียบโอนได้จะถูกบันทึกลงแบบฟอร์มตามหลักสูตร
                </div>
            </div>
        </div>

        <div class="card mb-3 border-success">
            <div class="card-header bg-success text-white d-flex justify-content-between align-items-center">
                <h5 class="mb-0"><i class="bi bi-plus-circle"></i> เพิ่มรายวิชาที่กำลังเรียน</h5>
                <a href="import_csv.php?student_id=<?= $id ?>" class="btn btn-light btn-sm"><i class="bi bi-upload"></i> นำเข้า CSV</a>
            </div>
            <div class="card-body">
                <form method="POST" action="<?= BASE_URL ?>/api/add_manual_course.php">
                    <input type="hidden" name="student_id" value="<?= $id ?>">
                    <div class="mb-2">
                        <label class="form-label">รหัสวิชา</label>
                        <input type="text" name="course_code" class="form-control" required>
                    </div>
                    <div class="mb-2">
                        <label class="form-label">ชื่อวิชา</label>
                        <input type="text" name="course_name" class="form-control" required>
                    </div>
                    <div class="mb-2">
                        <label class="form-label">หมวดวิชา (เลือกถ้าต้องการให้แสดงในกลุ่มที่ถูกต้อง)</label>
                        <select name="group_id" class="form-select">
                            <option value="">-- อัตโนมัติ (จับคู่ตามรหัสวิชา) --</option>
                            <?= getGroupSelectOptions($student['curriculum_id']) ?>
                        </select>
                    </div>
                    <div class="mb-2">
                        <label class="form-label">หน่วยกิต</label>
                        <input type="number" name="credits" class="form-control" step="0.5" required>
                    </div>
                    <div class="row mb-2">
                        <div class="col-4">
                            <label class="form-label">บรรยาย</label>
                            <input type="number" name="lecture" class="form-control" value="0">
                        </div>
                        <div class="col-4">
                            <label class="form-label">ปฏิบัติ</label>
                            <input type="number" name="practice" class="form-control" value="0">
                        </div>
                        <div class="col-4">
                            <label class="form-label">ศึกษาด้วยตนเอง</label>
                            <input type="number" name="self_study" class="form-control" value="0">
                        </div>
                    </div>
                    <div class="row mb-2">
                        <div class="col-6">
                            <label class="form-label">เกรดที่ได้</label>
                            <select name="grade" class="form-select">
                                <option value="">-- เลือก --</option>
                                <?= getGradeOptions() ?>
                            </select>
                        </div>
                        <div class="col-6">
                            <label class="form-label">ประเภท</label>
                            <select name="course_type" class="form-select">
                                <option value="">-- เลือก --</option>
                                <?= getCourseTypeOptions() ?>
                            </select>
                        </div>
                    </div>
                    <div class="row mb-2">
                        <div class="col-6">
                            <label class="form-label">ภาคเรียน</label>
                            <select name="semester" class="form-select">
                                <option value="">-- ไม่ระบุ --</option>
                                <option value="1">ภาคเรียนที่ 1</option>
                                <option value="2">ภาคเรียนที่ 2</option>
                                <option value="summer">ภาคฤดูร้อน</option>
                            </select>
                        </div>
                        <div class="col-6">
                            <label class="form-label">ปีการศึกษา</label>
                            <select name="academic_year" class="form-select">
                                <option value="">-- ไม่ระบุ --</option>
                                <?php for ($y = 2569; $y >= 2565; $y--): ?>
                                <option value="<?= $y ?>"><?= $y ?></option>
                                <?php endfor; ?>
                            </select>
                        </div>
                    </div>
                    <div class="mb-2">
                        <label class="form-label">หมายเหตุ</label>
                        <textarea name="notes" class="form-control" rows="2"></textarea>
                    </div>
                    <button type="submit" class="btn btn-success"><i class="bi bi-plus-lg"></i> เพิ่มรายวิชา</button>
                </form>
            </div>
        </div>
        <?php endif; ?>

        <div class="card">
            <div class="card-header bg-secondary text-white d-flex justify-content-between align-items-center">
                <h5 class="mb-0"><i class="bi bi-list-check"></i> รายวิชาเทียบโอนและกำลังเรียนรอออกเกรด</h5>
                <?php
                $ungraded_total = 0;
                foreach ($student_courses as $sc_tmp) {
                    if ($sc_tmp['grade'] === null || $sc_tmp['grade'] === '' || $sc_tmp['grade'] === '-' || mb_strpos((string)$sc_tmp['grade'], 'กำลัง') === 0) {
                        $ungraded_total++;
                    }
                }
                ?>
                <div>
                    <?php if ($ungraded_total > 0): ?>
                    <span class="badge bg-warning text-dark"><i class="bi bi-exclamation-triangle-fill"></i> รอออกเกรด <?= $ungraded_total ?> วิชา</span>
                    <?php endif; ?>
                    <span class="badge bg-light text-dark"><?= count($student_courses) ?> รายการ | <?= $total_completed ?> หน่วยกิต</span>
                </div>
            </div>
            <div class="card-body" style="max-height: 400px; overflow-y: auto;">
                <?php if (empty($student_courses)): ?>
                    <div class="text-muted text-center py-3">ยังไม่มีรายวิชาที่บันทึก</div>
                <?php else: ?>
                    <div class="table-responsive">
                    <table class="table table-sm table-hover">
                        <thead class="table-light">
                            <tr>
                                <th>รหัสวิชา</th>
                                <th>ชื่อวิชา</th>
                                <th>หน่วยกิต</th>
                                <th>เกรด</th>
                                <th>ภาคเรียน</th>
                                <th>ปีการศึกษา</th>
                                <th>ประเภท</th>
                                <?php if (!isStudent()): ?>
                                <th style="width:40px"></th>
                                <?php endif; ?>
                            </tr>
                        </thead>
                        <tbody>
                            <?php
                            $t = 0;
                            $ungraded_count = 0;
                            $graded_count = 0;
                            $isUngraded2 = fn($r) => $r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0;
                            foreach ($student_courses as $sc_check) {
                                if ($isUngraded2($sc_check)) $ungraded_count++;
                                else $graded_count++;
                            }
                            $printed_ungraded_header = false;
                            $printed_separator = false;
                            foreach ($student_courses as $sc):
                                $t += $sc['credits'];
                                $is_ungraded = $isUngraded2($sc);
                                if ($is_ungraded && !$printed_ungraded_header) {
                                    $printed_ungraded_header = true;
                                    echo '<tr class="table-secondary"><td colspan="' . (isStudent() ? 7 : 8) . '" class="text-center small py-1"><i class="bi bi-clock-history"></i> รายวิชาที่กำลังเรียน/รอออกเกรด</td></tr>';
                                }
                                if (!$is_ungraded && !$printed_separator && $printed_ungraded_header) {
                                    $printed_separator = true;
                                    echo '<tr class="table-dark"><td colspan="' . (isStudent() ? 7 : 8) . '" class="text-center small py-1"><i class="bi bi-check-all"></i> รายวิชาที่เทียบโอน/ออกเกรดแล้ว</td></tr>';
                                }
                            ?>
                            <tr class="<?= $is_ungraded ? 'table-warning' : '' ?>">
                                <td>
                                    <?php if ($is_ungraded): ?><i class="bi bi-exclamation-triangle-fill text-warning me-1" title="ยังไม่ออกเกรด"></i><?php endif; ?>
                                    <code><?= htmlspecialchars($sc['course_code']) ?></code>
                                </td>
                                <td class="small"><?= htmlspecialchars($sc['course_name_th']) ?></td>
                                <td><?= $sc['credits'] ?></td>
                                <td>
                                    <?php if (isStudent()): ?>
                                        <span class="badge bg-light text-dark"><?= htmlspecialchars($sc['grade'] ?: '-') ?></span>
                                    <?php else: ?>
                                        <form method="POST" action="<?= BASE_URL ?>/api/update_grade.php" class="d-inline">
                                            <input type="hidden" name="id" value="<?= $sc['id'] ?>">
                                            <input type="hidden" name="student_id" value="<?= $id ?>">
                                            <select name="grade" class="form-select form-select-sm <?= $is_ungraded ? 'border-warning' : '' ?>" style="width:auto;min-width:60px" onchange="this.form.submit()">
                                                <option value="">-</option>
                                                <?php $grades = ['A','B+','B','C+','C','D+','D','F','S','U','กำลังเรียน']; foreach ($grades as $g): ?>
                                                <option value="<?= $g ?>" <?= $sc['grade'] == $g ? 'selected' : '' ?>><?= $g ?></option>
                                                <?php endforeach; ?>
                                            </select>
                                        </form>
                                    <?php endif; ?>
                                </td>
                                <td class="small"><?= htmlspecialchars($sc['semester'] ? 'ภาค ' . $sc['semester'] : '-') ?></td>
                                <td class="small"><?= htmlspecialchars($sc['academic_year'] ?: '-') ?></td>
                                <td><span class="badge bg-<?= $sc['source_type'] == 'transfer' ? 'warning text-dark' : 'success' ?>"><?= htmlspecialchars($sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียนแล้ว')) ?></span></td>
                                <?php if (!isStudent()): ?>
                                <td><a href="<?= BASE_URL ?>/api/delete_course.php?id=<?= $sc['id'] ?>&student_id=<?= $id ?>" class="btn btn-danger btn-sm py-0 px-1" onclick="return confirm('ลบรายวิชานี้?')"><i class="bi bi-x"></i></a></td>
                                <?php endif; ?>
                            </tr>
                            <?php endforeach; ?>
                        </tbody>
                        <tfoot class="table-secondary fw-bold">
                            <tr><td colspan="2" class="text-end">รวม</td><td><?= $t ?></td><td colspan="<?= isStudent() ? 4 : 5 ?>"></td></tr>
                        </tfoot>
                    </table>
                    </div>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>
<?php require_once __DIR__ . '/../includes/footer.php'; ?>

<?php
function renderStudentTree($nodes, $level = 0) {
    foreach ($nodes as $node) {
        $g = $node['group'];
        echo '<div class="mb-2" style="margin-left: ' . ($level * 15) . 'px;">';
        echo '<div class="fw-bold small text-secondary">' . htmlspecialchars($g['name_th']);
        if ($g['min_credits'] > 0) {
            echo ' <small class="text-muted">(' . $g['min_credits'] . ' หน่วยกิต)</small>';
        }
        echo '</div>';

        foreach ($node['courses'] as $course) {
            $status_class = '';
            $status_badge = '<span class="badge bg-secondary status-badge">ยังไม่เรียน</span>';
            if (isset($course['_completed'])) {
                $sc = $course['_completed'];
                $label = $sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียนแล้ว');
                $grade_part = $sc['grade'] ? ' เกรด ' . htmlspecialchars($sc['grade']) : '';
                if ($sc['source_type'] == 'transfer') {
                    $status_class = 'bg-warning bg-opacity-10';
                    $status_badge = '<span class="badge bg-warning text-dark status-badge"><i class="bi bi-check-circle"></i> ' . $label . $grade_part . '</span>';
                } else {
                    $status_class = 'bg-success bg-opacity-10';
                    $status_badge = '<span class="badge bg-success status-badge"><i class="bi bi-check-circle"></i> ' . $label . $grade_part . '</span>';
                }
            }
            echo '<div class="course-item d-flex justify-content-between align-items-center py-1 px-2 ' . $status_class . '">';
            echo '<div><code>' . htmlspecialchars($course['code']) . '</code> <span class="small">' . htmlspecialchars($course['name_th']) . '</span></div>';
            echo '<div><span class="badge-credit small">' . $course['credits'] . '(' . $course['lecture_hours'] . '-' . $course['practice_hours'] . '-' . $course['self_study_hours'] . ')</span> ' . $status_badge . '</div>';
            echo '</div>';
        }

        if (!empty($node['children'])) {
            renderStudentTree($node['children'], $level + 1);
        }

        echo '</div>';
    }
}
