<?php
ini_set('display_errors', 1);

require_once '../../../resources/base_path_include.php';

require_once $base_path_to_learning_resources  . "includes/connect.php"; // use require for mandatory files
require_once $base_path_to_learning_resources . 'lib/function.php';
require_once $base_path_to_learning_resources . 'lib/validate_api_signature.php';
//valdation file
require_once $base_path_to_learning_resources . 'lib/validate_function.php';
require_once $base_path_to_learning . 'user_management/authenticate.php';
require_once $base_path_to_learning . 'functions/common_functions.php';
//db access function
require_once $base_path_to_learning_resources . 'includes/specific_db_config.php';
//aws image store
require_once $base_path_to_learning_resources . 'lib/bucket_functions/bucket_functions.php';
require_once $base_path_to_learning . "vendor/autoload.php";
require_once $base_path_to_learning . "faculty_api/faculty_function/common_faculty_function.php";
require_once $base_path_to_learning . "principal_api/principal_function/principal_function.php";
require_once $base_path_to_learning_resources . 'includes/aws_bucket_config.php';
require_once $base_path_to_learning . 'user_management/user_versioning.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$postdata = json_decode(file_get_contents("php://input"), true);
//print_r($postdata);
checkIfNoPhpContentsReceive();


if (
    !isset($postdata['lesson_id']) or !checkIfIssetAndNotEmpty($postdata['lesson_id']) or
    // !isset($postdata['institution_id']) or !checkIfIssetAndNotEmpty($postdata['institution_id']) or
    !isset($postdata['api_signature']) or !checkIfIssetAndNotEmpty($postdata['api_signature']) or
    !isset($postdata['function_type']) or !checkIfIssetAndNotEmpty($postdata['function_type'])  or
    !isset($postdata['jwt_token']) or  !checkIfIssetAndNotEmpty($postdata['jwt_token'])
) {
    errorreturn("All * fields are required.");
}
validateApiSignature($postdata['api_signature']);

$jwttoken = $postdata['jwt_token'];
$jwt_validate = authenticate_jwt($jwttoken);
//then workspace_id is iin decodede data of jwt use from there
$userid = $jwt_validate->data->id;
$workspace_id = $jwt_validate->data->workspace_id;
$username = $jwt_validate->data->username;
$role = $jwt_validate->data->role;
$institution_id = $jwt_validate->data->institution_id;
$branch_id = $jwt_validate->data->branch_id;

$specific_db_name = validateUserAccess($conn_rjllearning, $userid, $role, $workspace_id, ["teacher"], null);
if (!$specific_db_name) {
    errorreturn('Access denied.');
} else {
    $conn_rjllearning_specific = dynamicDbConnection($specific_db_name);
}

$version = isset($_POST['version']) ? $_POST['version'] : (isset($postdata['version']) ? $postdata['version'] : null);
$updated_time = isset($_POST['updated_time']) ? $_POST['updated_time'] : (isset($postdata['updated_time']) ? $postdata['updated_time'] : null);

$response = user_data_refresh($conn_rjllearning, $conn_rjllearning_specific,$version, $updated_time, $userid, $institution_id);

function getSpecificlesson($conn_rjllearning_specific, $institution_id, $branch_id, $lesson_id)
{

    $sql = $conn_rjllearning_specific->prepare("SELECT * FROM  lessons where id = ? AND institution_id =? AND branch_id = ?");
    $sql->execute(array($lesson_id, $institution_id, $branch_id));
    $rows = $sql->fetchAll();

    if (count($rows) == 1) {

        if ($rows[0]['audio_attachment'] != null and !is_array($rows[0]['audio_attachment'])) {
            $data_attachment = json_decode($rows[0]['audio_attachment'], true);
            $filePath = $data_attachment['filepath'];
            $originalName = $data_attachment['original_name'];
            $aws_attachment = displayFileFromS3($GLOBALS['s3_learning_bucket'], $GLOBALS['learning_bucketName'], $filePath);
            $final_array_audio   = array("filepath" => $aws_attachment, "original_name" => $originalName);
        } else {
            $final_array_audio =  null;
        }
        if ($rows[0]['primary_attachment'] != null and !is_array($rows[0]['primary_attachment'])) {
            $data_attachment = json_decode($rows[0]['primary_attachment'], true);
            $filePath = $data_attachment['filepath'];
            $originalName = $data_attachment['original_name'];
            $aws_attachment = displayFileFromS3($GLOBALS['s3_learning_bucket'], $GLOBALS['learning_bucketName'], $filePath);
            $final_array_attachment   = array("filepath" => $aws_attachment, "original_name" => $originalName);
        } else {
            $final_array_attachment =  null;
        }

        if ($rows[0]['cover_image'] != null and !is_array($rows[0]['cover_image'])) {
            $data_attachment = json_decode($rows[0]['cover_image'], true);
            $filePath = $data_attachment['filepath'];
            $originalName = $data_attachment['original_name'];
            $aws_attachment = displayFileFromS3($GLOBALS['s3_learning_bucket'], $GLOBALS['learning_bucketName'], $filePath);
            $final_cover_image   = array("filepath" => $aws_attachment, "original_name" => $originalName);
        } else {
            $final_cover_image =  null;
        }


        $class_info = getClass($conn_rjllearning_specific, $institution_id, $rows[0]['class_id']);
        $subject_info = getSubject($conn_rjllearning_specific, $institution_id, $rows[0]['subject_id']);
        $branch = getBranchInfo($conn_rjllearning_specific, $institution_id, $rows[0]['branch_id']);
        //  $branch_id = $rows[0]['branch_id'];

        // $branch = []; // Initialize branches array

        // if ($branch_id == 'all') {

        //     $branch[] = array('branch_id' => $branch_id, 'name' => ucwords($branch_id));
        // } else {
        //     // $imploded_branchids = implode(',', $branch_id); // Convert array to comma-separated string
        //     // print_R($imploded_branchids);
        //     $sql = "SELECT * FROM branch WHERE institution_id = ? AND id IN ($branch_id) ";
        //     $array_params = [$institution_id]; // Add institution_id to parameters
        //     $stmt = $conn_rjllearning_specific->prepare($sql);
        //     $stmt->execute($array_params);
        //     $section_rows = $stmt->fetchAll();

        //     foreach ($section_rows as $section_data) {
        //         $branch[] = array('branch_id' => $section_data['id'], 'name' => $section_data['name']);
        //     }
        // }


        if ($rows[0]['section_id'] === 'all') {
            $section = (object) [
                'section_id' => 'all',
                'section_name' => ucwords('all')
            ];
        } else {
            // If section_id is stored as a string like '["3"]', decode it
            $section_id = json_decode($rows[0]['section_id'], true); // Decode JSON string into array
            if (is_array($section_id) && count($section_id) === 1) {
                // Extract the single section ID
                $section_id = $section_id[0];
            }

            // Fetch the section details using the extracted section ID
            $section = getSection($conn_rjllearning_specific, $institution_id, $section_id);
        }

        $lesson_category_id = $rows[0]['lesson_category_id'];

        $sql_category = "SELECT id,topic_name FROM lesson_categories WHERE id = ? AND institution_id = ? AND branch_id = ?";
        $array_params = [$lesson_category_id, $institution_id, $branch_id];
        $stmtCategory = $conn_rjllearning_specific->prepare($sql_category);
        $stmtCategory->execute($array_params);
        $ResultLesson = $stmtCategory->fetchAll();

        if (count($ResultLesson) < 1) {

            errorreturn("Lesson category not exists.");
        }
        $lesson_categories =  array("lesson_category_id" => $ResultLesson[0]['id'], "topic_name" => $ResultLesson[0]['topic_name']);


        return array(
            'lesson_id' => $rows[0]['id'],
            'branch_id' => $branch,
            'class_id' => $class_info,
            'section_id' => $section,
            'subject_info' => $subject_info,
            'publish_date' => $rows[0]['publish_date'],
            'publish_time' => $rows[0]['publish_time'],
            'terminate_date' => $rows[0]['terminate_date'],
            'termination_time' => $rows[0]['termination_time'],
            'lesson_category_id' => $lesson_categories,
            'lesson_number' => $rows[0]['lesson_number'],
            'lesson_name' => $rows[0]['lesson_name'],
            'author' => $rows[0]['author'],
            'description' => $rows[0]['description'],
            'type' => $rows[0]['type'],
            'primary_attachment' => $final_array_attachment,
            'cover_image' => $final_cover_image,
            'audio_attachment' => $final_array_audio,
            'link' => $rows[0]['link']
        );
    } else {
        errorreturn("Enter Invalid lesson info.");
    }
}

if ($postdata['function_type']  == "fetch_specific_lesson") {

    $lesson_id = trim($postdata['lesson_id']);
    // $institution_id = trim($postdata['institution_id']);
    $check_academic_confirmation = CheckAcademicSession($conn_rjllearning_specific, $institution_id);
    if ($check_academic_confirmation != true) {
        errorreturn("Access denied. Academic session not active.");
    }
    
    // $teacher_data = getClassSectionSubjectsAndInChargeRoles($conn_rjllearning, $conn_rjllearning_specific, $institution_id, $userid);
    // $class_section_subjects  = $teacher_data['class_section_subjects'];
    // $class_incharge_roles = $teacher_data['class_incharge_roles'];
    // $staff_access_modules = $teacher_data['staff_access_modules'];

    // $check_faculty_status = checkFacultyModuleGranted('fetch_lesson', $class_section_subjects, $class_incharge_roles, $staff_access_modules, null, null, null, $conn_rjllearning);
    // if ($check_faculty_status == false) {
    //     errorreturn("Access denied: You do not have the required permissions.");
    // }
    $success['data'] = getSpecificlesson($conn_rjllearning_specific, $institution_id, $branch_id, $lesson_id);
    successreturn($success);
}
