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

// ✅ CORS headers
// header('Access-Control-Allow-Origin: *');
// header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
// header('Access-Control-Allow-Headers: Content-Type, Authorization, memberid, device');

// if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
//     http_response_code(204);
//     exit;
// }

require ('../config.php');

$response = array();

// ✅ FIX: Accept parameters from BOTH $params (if available) AND URL query string
$token = isset($params['token']) ? $params['token'] : (isset($_REQUEST['token']) ? $_REQUEST['token'] : '');
$sac_batch_id = isset($params['batch_id']) ? $params['batch_id'] : (isset($_REQUEST['batch_id']) ? $_REQUEST['batch_id'] : '');
$sac_cp_id = isset($params['cp_id']) ? $params['cp_id'] : (isset($_REQUEST['cp_id']) ? $_REQUEST['cp_id'] : '');
$device = isset($params['device']) ? $params['device'] : (isset($_REQUEST['device']) ? $_REQUEST['device'] : '');
$subject_id = isset($params['subject_id']) ? $params['subject_id'] : (isset($_REQUEST['subject_id']) ? $_REQUEST['subject_id'] : '');
$member_ID = isset($params['memberid']) ? $params['memberid'] : (isset($_REQUEST['memberid']) ? $_REQUEST['memberid'] : '');
$emp_id = isset($params['empid']) ? $params['empid'] : (isset($_REQUEST['empid']) ? $_REQUEST['empid'] : '');
$added_date = date("Y-m-d H:i:s");
$path = $GLOBALS["global_files_url"];

// ✅ CRITICAL: Get stud_id and esm_id from either source
$esm_id = isset($params["esm_id"]) ? $params["esm_id"] : (isset($_REQUEST["esm_id"]) ? $_REQUEST["esm_id"] : '');
$stud_id = isset($params["stud_id"]) ? $params["stud_id"] : (isset($_REQUEST["stud_id"]) ? $_REQUEST["stud_id"] : '');

$errors = array(); // Initialize errors array

$common = new common($conn, $member_ID);

// Validate required parameters
if (empty($stud_id)) {
    $errors[] = "Student ID is required";
}

if (empty($esm_id)) {
    $errors[] = "Exam Schedule ID is required";
}

if (empty($errors)) {
    
    // Get student details
    $student_details_sql = "SELECT 
                sd.`stud_id`, 
                sd.`stud_name`, 
                sd.`stud_admission_no`,
                swb.`sac_roll_no`, 
                ocbd.`org_cbcd_id` as class_id, 
                CONCAT(oc.`org_c_name`,'-',ocbd.`org_cbcd_name`) as class_name,
                CONCAT('$path','',`fmm_relative_path`) as stud_image,
                esm.`esm_mark_publish_date`
            FROM `student_details` sd 
            LEFT JOIN `student_enrolement` se ON sd.`stud_id` = se.`se_stu_id` 
            LEFT JOIN `student_with_batches` swb ON se.`se_id` = swb.`sac_se_id` 
            LEFT JOIN `org_course_batch_division` ocbd ON swb.`sac_division_id` = ocbd.`org_cbcd_id` 
            LEFT JOIN `org_course_batch` ocb ON swb.`sac_batch_id` = ocb.`org_cb_id` 
            LEFT JOIN `org_course` oc ON ocb.`org_cb_course_id` = oc.`org_c_id` 
            LEFT JOIN `file_manager_master` fmm ON sd.`stud_fmm_id` = fmm.`fmm_id`
            LEFT JOIN `exam_schduled_master` esm ON esm.`esm_id` = '$esm_id'
            WHERE sd.`stud_id` = '$stud_id' AND se.`se_is_active` = 'Active'
            LIMIT 1";
    
    $result = mysqli_query($conn, $student_details_sql);
    $student_details = mysqli_fetch_assoc($result);

    
    
    if (!$student_details) {
        $errors[] = "Student not found or not enrolled in any active batch";
    }
}

$subjects = [];
$esm_data = [];

if (empty($errors)) {
    
    // Step 1: Fetch subject and exam group details for the specific esm_id
    $subComponentQuery1 = "SELECT
        `org_css_subject_name`,
        `egcm_sub_id` as ss_subject_id,
        `egcm_ec_id`,
        `ec_eg_id` as egc_eg_id,
        `esm_id` as egcm_esm_id
    FROM
        `student_with_exam_group_component_mark`
    LEFT JOIN `exam_schduled_master` ON `egcm_esm_id` = `esm_id`
    LEFT JOIN `exam_group_component` ON `ec_id` = `egcm_ec_id`
    LEFT JOIN `org_course_syllabus_subjects` ON `org_css_id` = `egcm_sub_id`
    WHERE
        `egcm_stud_id` = '$stud_id'
        AND `egcm_esm_id` = '$esm_id'";
    
    $result1 = mysqli_query($conn, $subComponentQuery1);

    $egc_eg_ids = [];
    $ec_ids = [];
    $subjectids = [];
    $esm_ids = [];
    
    while ($row1 = mysqli_fetch_assoc($result1)) {
        if (!empty($row1["egc_eg_id"])) {
            $egc_eg_ids[] = $row1["egc_eg_id"];
        }
        if (!empty($row1["egcm_ec_id"])) {
            $ec_ids[] = $row1["egcm_ec_id"];
        }
        $esm_ids[] = $row1["egcm_esm_id"];
        $subjects[$row1["ss_subject_id"]] = $row1;
        $subjectids[] = $row1["ss_subject_id"];
    }
    
    $egc_eg_ids = array_unique($egc_eg_ids);

    // Step 2: Fetch component details if subjects are found
    if (!empty($subjectids) && !empty($egc_eg_ids)) {
        $egc_eg_ids_str = implode(',', $egc_eg_ids);
        
        $subComponentQuery2 = "SELECT 
            `egcm_id`, 
            `egcm_sub_id`, 
            `egcm_ec_id`, 
            `egcm_mark`, 
            `egcm_status`, 
            `ec_eg_id` as egc_eg_id,
            `egcm_esm_id`,
            `ec_name`
        FROM `student_with_exam_group_component_mark` 
        LEFT JOIN `exam_schduled_master` ON `egcm_esm_id` = `esm_id`
        LEFT JOIN `exam_group_component` ON `ec_id` = `egcm_ec_id`
        WHERE `egcm_stud_id` = '$stud_id' 
        AND `egcm_esm_id` = '$esm_id'
        AND `ec_eg_id` IN ($egc_eg_ids_str) 
        GROUP BY `egcm_id`, `egcm_sub_id`, `egcm_ec_id`, `egc_eg_id`";
        
        $result2 = mysqli_query($conn, $subComponentQuery2);

        $egcm_ids = [];
        while ($row2 = mysqli_fetch_assoc($result2)) {
            $egcm_ids[] = $row2["egcm_id"];
            $subjects[$row2["egcm_sub_id"]]["component"][$row2["egcm_id"]] = $row2;
            $subjects[$row2["egcm_sub_id"]]["component"][$row2["egcm_id"]]["sub_component"] = [];
            $subjects[$row2["egcm_sub_id"]]["component"][$row2["egcm_id"]]["total_mark"] = $row2["egcm_mark"]; // Component mark only
        }
    }

    // Step 3: Fetch sub-component details with names if components are found
    if (!empty($egcm_ids)) {
        $egcm_ids_str = implode(',', $egcm_ids);
        
        $subComponentQuery3 = "SELECT 
            `egscm_sub_id`, 
            `egscm_egcm_id`, 
            `egscm_id`, 
            `egscm_esc_id`, 
            `egscm_mark`, 
            `egscm_ec_id`, 
            `egscm_esm_id`,
            `ec_eg_id` as egc_eg_id,
            `esc_name`
        FROM `student_with_exam_group_sub_component_mark` 
        LEFT JOIN `student_with_exam_group_component_mark` ON `egscm_egcm_id` = `egcm_id`
        LEFT JOIN `exam_schduled_master` ON `egcm_esm_id` = `esm_id`
        LEFT JOIN `exam_group_component` ON `egcm_ec_id` = `ec_id`
        LEFT JOIN `exam_group_subcomponent` ON `esc_id` = `egscm_esc_id`
        WHERE `egscm_egcm_id` IN ($egcm_ids_str)
        AND `egscm_esm_id` = '$esm_id'
        GROUP BY `egscm_id`";
        
        $result3 = mysqli_query($conn, $subComponentQuery3);

        while ($row3 = mysqli_fetch_assoc($result3)) {
            $subjects[$row3["egscm_sub_id"]]["component"][$row3["egscm_egcm_id"]]["sub_component"][$row3["egscm_id"]] = $row3;
        }
    }

    // Step 4: Calculate grand_total and grade for each subject
    foreach ($subjects as $subject_id => &$subject_data) {
        if (isset($subject_data["component"])) {
            $grand_total = 0;
            foreach ($subject_data["component"] as $component) {
                $grand_total += floatval($component["egcm_mark"]);
            }
            
            // Add grand_total
            $subject_data["grand_total"] = $grand_total;
            
            // Get asm_id for this subject
            $grade_sql = "SELECT `eg_asm_id` FROM `exam_group` eg
                         LEFT JOIN `exam_scheduled_child` esc ON eg.`eg_id` = esc.`esc_eg_id`
                         WHERE esc.`esc_esm_id` = '$esm_id' 
                         AND esc.`esc_subject` = '$subject_id'
                         LIMIT 1";
            
            $result_grade = mysqli_query($conn, $grade_sql);
            $grade_row = mysqli_fetch_assoc($result_grade);
            
            $asm_id = $grade_row['eg_asm_id'] ?? null;
            
            // Calculate grade based on asm_id
            $grade = "";
            if ($asm_id) {
                $GRADE_GET_SQL = "SELECT * FROM `assesment_config_child` WHERE `acc_acm_id` = '$asm_id'";
                $GRADE_GET_QRY = mysqli_query($conn, $GRADE_GET_SQL);
                
                if ($GRADE_GET_QRY->num_rows > 0) {
                    while ($GRADE_ROW = mysqli_fetch_assoc($GRADE_GET_QRY)) {
                        if ($grand_total >= $GRADE_ROW["acc_mark_from"] && $grand_total <= $GRADE_ROW["acc_mark_to"]) {
                            $grade = $GRADE_ROW["acc_grade"];
                            break;
                        }
                    }
                }
            }
            
            $subject_data["grade"] = $grade;
        }
    }
    unset($subject_data); // Break reference

    // Step 5: Fetch exam schedule details
    if (!empty($esm_ids)) {
        $ESM_GET_SQL = "SELECT DISTINCT 
            `esc_esm_id`,
            `esc_subject`,
            org_css_subject_name as subject_name
        FROM `exam_scheduled_child` 
        LEFT JOIN org_course_syllabus_subjects ON esc_subject = org_css_id
        WHERE `esc_esm_id` = '$esm_id' 
        GROUP BY `esc_esm_id`, `esc_subject`";
        
        $result4 = mysqli_query($conn, $ESM_GET_SQL);
        
        while ($ESM_ROW = mysqli_fetch_assoc($result4)) {
            $esm_data[] = $ESM_ROW;
        }
    }
}

if (!empty($errors)) {
    $response["status"] = "error";
    $response["message"] = $errors[0];
    http_response_code(400);
} else {
    $response["status"] = "ok";
    $response["message"] = "Assessment details";
    $response["master_details"] = $student_details;
    $response["esm_details"] = $subjects;
    $response["subject_details"] = $esm_data;
}

$conn->close();
echo json_encode($response);
?>
