<?php
include 'connection.php'; // Include your database connection file
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

// Fetch the logged-in lecturer's ID (replace with actual session logic)
$lecturerId = 1; // Example lecturer ID (replace with session logic)

// Fetch the lecturer's department ID
$lecturerDepartmentQuery = $conn->query("SELECT department_id FROM lecturers WHERE id = $lecturerId") or die($conn->error);
if ($lecturerDepartmentQuery) {
    $lecturerDepartment = $lecturerDepartmentQuery->fetch_assoc();
    $lecturerDepartmentId = $lecturerDepartment['department_id'];
} else {
    die("Error fetching lecturer's department: " . $conn->error);
}

// Fetch academic years, levels, and semesters
$academicYears = $conn->query("SELECT * FROM academic_years") or die($conn->error);
$levels = $conn->query("SELECT * FROM levels WHERE department_id = $lecturerDepartmentId") or die($conn->error); // Only levels for the lecturer's department
$semesters = $conn->query("SELECT * FROM semesters") or die($conn->error);

// Initialize variables for form data
$selectedAcademicYearId = isset($_POST['academic_year_id']) ? intval($_POST['academic_year_id']) : 0;
$selectedLevelId = isset($_POST['level_id']) ? intval($_POST['level_id']) : 0;
$selectedSemesterId = isset($_POST['semester_id']) ? intval($_POST['semester_id']) : 0;
$selectedCourseId = isset($_POST['course_id']) ? intval($_POST['course_id']) : 0;

// Fetch courses assigned to the lecturer based on the selected academic year, level, and semester
$assignedCourses = [];
if ($selectedAcademicYearId && $selectedLevelId && $selectedSemesterId) {
    $assignedCourses = $conn->query("
        SELECT c.id, c.course_name 
        FROM assigned_courses ac
        JOIN courses c ON ac.course_id = c.id
        WHERE ac.lecturer_id = $lecturerId
          AND c.academic_year_id = $selectedAcademicYearId
          AND c.level_id = $selectedLevelId
          AND c.semester_id = $selectedSemesterId
    ") or die($conn->error);
}

// Fetch carry-over courses for the selected level and semester
$carryOverCourses = [];
if ($selectedAcademicYearId && $selectedLevelId && $selectedSemesterId) {
    $carryOverCourses = $conn->query("
        SELECT c.id, c.course_name 
        FROM carry_over co
        JOIN courses c ON co.course_id = c.id
        WHERE co.student_id IN (
            SELECT student_id FROM registrations WHERE course_id = c.id
        )
        AND c.level_id = $selectedLevelId
        AND c.semester_id = $selectedSemesterId
        AND c.department_id = $lecturerDepartmentId
    ") or die($conn->error);
}

// Combine assigned courses and carry-over courses
$allCourses = [];
if ($assignedCourses) {
    while ($course = $assignedCourses->fetch_assoc()) {
        $allCourses[] = $course;
    }
}
if ($carryOverCourses) {
    while ($course = $carryOverCourses->fetch_assoc()) {
        $allCourses[] = $course;
    }
}

// Fetch students registered for the selected course (including carry-over students)
$students = [];
if ($selectedCourseId && isset($_POST['get_students'])) {
    $stmt = $conn->prepare("
        SELECT s.id, s.admission_number, s.first_name, s.last_name, s.passport
        FROM students s
        JOIN registrations r ON s.id = r.student_id
        WHERE r.course_id = ?
        UNION
        SELECT s.id, s.admission_number, s.first_name, s.last_name, s.passport
        FROM students s
        JOIN carry_over co ON s.id = co.student_id
        WHERE co.course_id = ?
    ");
    $stmt->bind_param("ii", $selectedCourseId, $selectedCourseId);
    $stmt->execute();
    $students = $stmt->get_result();
}

// Process form submission for uploading scores
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['upload_scores'])) {
    // Validate inputs
    if (empty($selectedCourseId)) {
        die("Please select a course.");
    }

    // Get total marks and minimum score for the course
    $totalMarks = floatval($_POST['total_marks']);
    $minimumScore = floatval($_POST['minimum_score']);

    // Fetch the department ID for the selected course
    $courseQuery = $conn->query("SELECT department_id FROM courses WHERE id = $selectedCourseId") or die($conn->error);
    $courseData = $courseQuery->fetch_assoc();
    $departmentId = $courseData['department_id'];

    // Loop through each student and upload their score
    foreach ($_POST['student_scores'] as $studentId => $marksObtained) {
        $marksObtained = floatval($marksObtained);

        // Check if the student has a previous result for this course
        $stmt = $conn->prepare("SELECT id FROM results WHERE student_id = ? AND course_id = ?");
        $stmt->bind_param("ii", $studentId, $selectedCourseId);
        $stmt->execute();
        $result = $stmt->get_result();

        if ($result->num_rows > 0) {
            // Update the existing result
            $stmt = $conn->prepare("UPDATE results SET marks_obtained = ?, total_marks = ?, minimum_score = ? WHERE student_id = ? AND course_id = ?");
            $stmt->bind_param("dddii", $marksObtained, $totalMarks, $minimumScore, $studentId, $selectedCourseId);
        } else {
            // Insert a new result
            $stmt = $conn->prepare("INSERT INTO results (student_id, course_id, marks_obtained, total_marks, minimum_score) VALUES (?, ?, ?, ?, ?)");
            $stmt->bind_param("iiddd", $studentId, $selectedCourseId, $marksObtained, $totalMarks, $minimumScore);
        }

        if (!$stmt->execute()) {
            die("Error uploading result: " . $stmt->error);
        }

        // Check if the student passed the course
        if ($marksObtained >= $minimumScore) {
            // Remove the course from carry_over if the student passes
            $stmt = $conn->prepare("DELETE FROM carry_over WHERE student_id = ? AND course_id = ?");
            $stmt->bind_param("ii", $studentId, $selectedCourseId);
            if (!$stmt->execute()) {
                die("Error updating carry-over: " . $stmt->error);
            }
        } else {
            // Add the course to carry_over if the student fails
            $stmt = $conn->prepare("INSERT INTO carry_over (student_id, course_id, semester_id, academic_year_id, department_id, level_id, status) VALUES (?, ?, ?, ?, ?, ?, 'Failed')");
            $stmt->bind_param("iiiiii", $studentId, $selectedCourseId, $selectedSemesterId, $selectedAcademicYearId, $departmentId, $selectedLevelId);
            if (!$stmt->execute()) {
                die("Error updating carry-over: " . $stmt->error);
            }

            // Delete the course from the student's registration to allow re-registration
            $stmt = $conn->prepare("DELETE FROM registrations WHERE student_id = ? AND course_id = ?");
            $stmt->bind_param("ii", $studentId, $selectedCourseId);
            if (!$stmt->execute()) {
                die("Error deleting course from registration: " . $stmt->error);
            }
        }
    }

    echo "Scores uploaded successfully for all students!";
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Upload Student Scores</title>
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
    <h2 class="text-center mb-4">Upload Student Scores</h2>

    <form action="" method="POST">
        <!-- Academic Year -->
        <div class="form-group">
            <label for="academic_year_id">Academic Year</label>
            <select name="academic_year_id" id="academic_year_id" class="form-control" required onchange="this.form.submit()">
                <option value="">Select Academic Year</option>
                <?php while ($year = $academicYears->fetch_assoc()): ?>
                    <option value="<?= $year['id'] ?>" <?= $selectedAcademicYearId == $year['id'] ? 'selected' : '' ?>>
                        <?= $year['year'] ?>
                    </option>
                <?php endwhile; ?>
            </select>
        </div>

        <!-- Level -->
        <div class="form-group">
            <label for="level_id">Level</label>
            <select name="level_id" id="level_id" class="form-control" required onchange="this.form.submit()">
                <option value="">Select Level</option>
                <?php while ($level = $levels->fetch_assoc()): ?>
                    <option value="<?= $level['id'] ?>" <?= $selectedLevelId == $level['id'] ? 'selected' : '' ?>>
                        <?= $level['name'] ?>
                    </option>
                <?php endwhile; ?>
            </select>
        </div>

        <!-- Semester -->
        <div class="form-group">
            <label for="semester_id">Semester</label>
            <select name="semester_id" id="semester_id" class="form-control" required onchange="this.form.submit()">
                <option value="">Select Semester</option>
                <?php while ($semester = $semesters->fetch_assoc()): ?>
                    <option value="<?= $semester['id'] ?>" <?= $selectedSemesterId == $semester['id'] ? 'selected' : '' ?>>
                        <?= $semester['name'] ?>
                    </option>
                <?php endwhile; ?>
            </select>
        </div>

        <!-- Course -->
        <div class="form-group">
            <label for="course_id">Course</label>
            <select name="course_id" id="course_id" class="form-control" required onchange="this.form.submit()">
                <option value="">Select Course</option>
                <?php if ($selectedAcademicYearId && $selectedLevelId && $selectedSemesterId): ?>
                    <?php foreach ($allCourses as $course): ?>
                        <option value="<?= $course['id'] ?>" <?= $selectedCourseId == $course['id'] ? 'selected' : '' ?>>
                            <?= $course['course_name'] ?>
                        </option>
                    <?php endforeach; ?>
                <?php endif; ?>
            </select>
        </div>

        <!-- GET Button -->
        <div class="form-group">
            <button type="submit" name="get_students" class="btn btn-primary">GET</button>
        </div>

        <!-- Display Students -->
        <?php if (isset($_POST['get_students']) && $students): ?>
            <h3>Students Registered for the Course</h3>

            <!-- Total Marks and Minimum Score -->
            <div class="form-group">
                <label for="total_marks">Total Marks</label>
                <input type="number" name="total_marks" id="total_marks" class="form-control" required>
            </div>

            <div class="form-group">
                <label for="minimum_score">Minimum Score</label>
                <input type="number" name="minimum_score" id="minimum_score" class="form-control" required>
            </div>

            <table class="table">
                <thead>
                    <tr>
                        <th>Admission Number</th>
                        <th>Name</th>
                        <th>Passport</th>
                        <th>Marks Obtained</th>
                    </tr>
                </thead>
                <tbody>
                    <?php while ($student = $students->fetch_assoc()): ?>
                        <tr>
                            <td><?= $student['admission_number'] ?></td>
                            <td><?= $student['first_name'] . ' ' . $student['last_name'] ?></td>
                            <td><img src="uploads/<?= $student['passport'] ?>" alt="Passport" width="50"></td>
                            <td>
                                <input type="number" name="student_scores[<?= $student['id'] ?>]" class="form-control" required>
                            </td>
                        </tr>
                    <?php endwhile; ?>
                </tbody>
            </table>

            <!-- Upload Scores Button -->
            <button type="submit" name="upload_scores" class="btn btn-success">Upload Scores</button>
        <?php endif; ?>
    </form>
</div>

<!-- Bootstrap and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.2/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>