<?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/validate_api_signature.php';
require_once $base_path_to_learning_resources . 'lib/function.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_resources . 'includes/aws_bucket_config.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  !isset($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;

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


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

    $sql = $conn_rjllearning_specific->prepare("SELECT * FROM  lessons where id = ? and institution_id =?");
    $sql->execute(array($lesson_id, $institution_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']);

        if ($rows[0]['branch_id'] == 'all') {
            $branch = array('branch_id' => 'all', 'name' => ucwords('all'));
        } else {
            $branch = getBranchInfo($conn_rjllearning_specific, $institution_id, $rows[0]['branch_id']);
        }

        // $section_info = getSectionInstitutionBranch($conn_rjllearning_specific,$institution_id,$rows[0]['branch_id'],$rows[0]['section_id']);
        
        $section_info = array();
        $section_id = json_decode($rows[0]['section_id'], true);
        // print_r($section_id);
        // Check if JSON decoding failed or if it's a plain string
        if ($rows[0]['section_id'] === 'all') {
            $section_info[] = array('section_id' => 'all', 'section_name' => ucwords('all'));
        } elseif (is_array($section_id)) {
            // Create placeholders for `id IN` clause
            $placeholders = implode(',', array_fill(0, count($section_id), '?'));
            $sql = "SELECT * FROM section_info 
            WHERE institution_id = ? 
            AND (id IN ($placeholders) OR id = 'all') 
            AND (branch_id LIKE ? OR branch_id = 'all')";
            // Merge institution_id, section_id array, and branch_id into params
            $array_params = array_merge([$institution_id], $section_id, ['%' . $rows[0]['branch_id'] . '%']);
            $stmt = $conn_rjllearning_specific->prepare($sql);
            $stmt->execute($array_params);
            $section_rows = $stmt->fetchAll();
            // Process fetched rows
            foreach ($section_rows as $section_data) {
                $section_info[] = array('section_id' => $section_data['id'], 'section_name' => $section_data['section_name']);
            }
        }

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

        $sql_category = "SELECT id,topic_name FROM lesson_categories WHERE id = ? AND institution_id = ?";
        $array_params = [$lesson_category_id, $institution_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_info,
            '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.");
    // }
    $success['data'] = getSpecificlesson($conn_rjllearning_specific, $institution_id, $lesson_id);
    successreturn($success);
}
