<?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_resources . 'includes/aws_bucket_config.php';
require_once $base_path_to_learning_resources . '/lib/cron_jobs/firebase_notification/notification_history_function.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";

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

if (

    !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);
$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 = validateStudentAcess($conn_rjllearning, $role, $workspace_id, ["faculty"], null, null, $userid);
if (!$specific_db_name) {
    errorreturn('Access denied.');
} else {
    $conn_rjllearning_specific = dynamicDbConnection($specific_db_name);
}


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

    $function_type = trim($postdata['function_type']);

    // Get faculty ID
    $Faculty_Codes = $conn_rjllearning_specific->prepare("
        SELECT id 
        FROM faculty_info 
        WHERE userid = ? AND institution_id = ? AND branch_id = ?
    ");
    $Faculty_Codes->execute([$userid, $institution_id, $branch_id]);
    $result_faculty = $Faculty_Codes->fetch(PDO::FETCH_ASSOC);

    if (!$result_faculty) {
        errorreturn("Faculty Not Found.");
    }

    $faculty_id = $result_faculty['id'];

    // Fetch teacher data
    $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'];

    // Permissions check — assuming $class_id, $section_id, $subject_id are set somewhere
    $check_faculty_status = checkFacultyModuleGranted(
        $function_type, 
        $class_section_subjects, 
        $class_incharge_roles, 
        $staff_access_modules, 
        $class_id ?? null, 
        $section_id ?? null, 
        $subject_id ?? null, 
        $conn_rjllearning
    );

    if ($check_faculty_status === false) {
        errorreturn("Access denied: You do not have the required permissions.");
    }

    // Filters
    $user_id       = $userid;
    $search_string = isset($postdata['search_string']) ? trim((string)$postdata['search_string']) : null;
    $from_date     = isset($postdata['from_date']) ? trim((string)$postdata['from_date']) : null;
    $to_date       = isset($postdata['to_date']) ? trim((string)$postdata['to_date']) : null;

    // Validate date range
    if ($from_date && $to_date && strtotime($from_date) > strtotime($to_date)) {
        errorreturn('Invalid Date Range');
    }

    $limit = isset($postdata['limit']) && is_numeric($postdata['limit']) ? (int)$postdata['limit'] : 10;
    $page  = isset($postdata['page']) && is_numeric($postdata['page']) ? (int)$postdata['page'] : 1;

    $filters = [
        'user_id'       => $user_id,
        'search_string' => $search_string,
        'from_date'     => $from_date,
        'to_date'       => $to_date,
        'limit'         => $limit,
        'offset'        => ($limit !== 'all') ? (($page - 1) * $limit) : null,
    ];

    // Fetch notifications
    $success['data'] = fetchNotifications($conn_rjllearning, $filters);
    successreturn($success);
}
