<?php
require_once '../../config/config.php';
header('Content-Type: application/json');

try {
    $examIds = $_POST['exam_ids'] ?? [];
    $courseIds = $_POST['course_ids'] ?? [];
    
    if (empty($examIds) || empty($courseIds)) {
        echo json_encode(['success' => false, 'message' => 'Exam IDs and Course IDs are required']);
        exit;
    }
    
    // Convert arrays to comma-separated strings for SQL IN clause
    $examIdsStr = implode(',', array_map('intval', $examIds));
    $courseIdsStr = implode(',', array_map('intval', $courseIds));
    
    // Get exam details
    $examsSql = "SELECT e.exam_id, e.exam_name, e.academic_year, e.semester
                 FROM exams e
                 WHERE e.exam_id IN ($examIdsStr) AND e.status = 'Active'";
    
    $examsStmt = $pdo->prepare($examsSql);
    $examsStmt->execute();
    $exams = $examsStmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (empty($exams)) {
        echo json_encode(['success' => false, 'message' => 'No active exams found']);
        exit;
    }
    
    $totalSynced = 0;
    $examsProcessed = 0;
    $errors = [];
    $details = [];
    
    foreach ($exams as $exam) {
        // Get subjects for the selected courses and this exam's semester
        $subjectsSql = "SELECT s.subject_id, s.subject_name, s.subject_code, c.course_id, c.course_name
                        FROM subjects s
                        LEFT JOIN courses c ON c.course_id = s.course_id
                        WHERE s.course_id IN ($courseIdsStr) AND s.semester = ?
                        ORDER BY c.course_name, s.subject_name";
        
        $subjectsStmt = $pdo->prepare($subjectsSql);
        $subjectsStmt->execute([$exam['semester']]);
        $subjects = $subjectsStmt->fetchAll(PDO::FETCH_ASSOC);
        
        if (empty($subjects)) {
            $errors[] = "No subjects found for exam '{$exam['exam_name']}' (Semester: {$exam['semester']}) - skipped";
            continue;
        }
        
        // Check existing exam subjects for this exam
        $existingSql = "SELECT subject_id FROM exam_subjects WHERE exam_id = ?";
        $existingStmt = $pdo->prepare($existingSql);
        $existingStmt->execute([$exam['exam_id']]);
        $existingSubjects = $existingStmt->fetchAll(PDO::FETCH_COLUMN);
        
        // Group subjects by course for better reporting
        $subjectsByCourse = [];
        foreach ($subjects as $subject) {
            $courseId = $subject['course_id'];
            if (!isset($subjectsByCourse[$courseId])) {
                $subjectsByCourse[$courseId] = [
                    'course_id' => $courseId,
                    'course_name' => $subject['course_name'],
                    'subjects' => []
                ];
            }
            $subjectsByCourse[$courseId]['subjects'][] = $subject;
        }
        
        $examSyncedCount = 0;
        $examSkippedCount = 0;
        
        // Process each course
        foreach ($subjectsByCourse as $courseData) {
            $courseSyncedCount = 0;
            $courseSkippedCount = 0;
            
            // Insert subjects that don't already exist
            foreach ($courseData['subjects'] as $subject) {
                if (in_array($subject['subject_id'], $existingSubjects)) {
                    $courseSkippedCount++;
                    continue; // Skip existing subjects
                }
                
                try {
                    $insertSql = "INSERT INTO exam_subjects (exam_id, subject_id, max_marks, pass_marks) 
                                 VALUES (?, ?, 100, 40)";
                    
                    $insertStmt = $pdo->prepare($insertSql);
                    $insertStmt->execute([$exam['exam_id'], $subject['subject_id']]);
                    $courseSyncedCount++;
                    $totalSynced++;
                    
                } catch (Exception $e) {
                    $errors[] = "Failed to insert subject '{$subject['subject_name']}' for exam '{$exam['exam_name']}': " . $e->getMessage();
                }
            }
            
            $examSyncedCount += $courseSyncedCount;
            $examSkippedCount += $courseSkippedCount;
            
            if ($courseSyncedCount > 0 || $courseSkippedCount > 0) {
                $details[] = [
                    'exam_name' => $exam['exam_name'],
                    'course_name' => $courseData['course_name'],
                    'synced' => $courseSyncedCount,
                    'skipped' => $courseSkippedCount
                ];
            }
        }
        
        if ($examSyncedCount > 0 || $examSkippedCount > 0) {
            $examsProcessed++;
        }
    }
    
    // Prepare response
    $response = [
        'success' => true,
        'total_synced' => $totalSynced,
        'exams_processed' => $examsProcessed,
        'total_exams' => count($exams),
        'details' => $details
    ];
    
    if (!empty($errors)) {
        $response['warnings'] = $errors;
    }
    
    echo json_encode($response);
    
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Database error: ' . $e->getMessage()]);
}
?>
