<?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/check_username_availability.php';
require_once $base_path_to_learning . 'user_management/authenticate.php';
require_once $base_path_to_learning . 'admin_api/academic_session/functions/registration_functions.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';
require_once $base_path_to_learning . 'user_management/faculty/functions.php';
require_once $base_path_to_learning . "vendor/autoload.php";
require_once $base_path_to_learning_resources . 'lib/bucket_functions/bucket_functions.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);
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  !checkIfIssetAndNotEmpty($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;

require_once $base_path_to_learning . 'user_management/user_versioning.php';

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

if($role == 'principal' or $role == 'teacher'){
    $institution_id = $jwt_validate->data->institution_id;
    $branch_id = $jwt_validate->data->branch_id;
    

    $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);
}

if($role == 'admin' or $role == 'superadmin'){
      if(!isset($postdata['institution_id']) or !checkIfIssetAndNotEmpty($postdata['institution_id']))
      {
           errorreturn("institution field is required.");
      }else{
            $institution_id = $postdata['institution_id'];
             if (isset($postdata['branch_id']) and !empty($postdata['branch_id'])) {
                $branch_id = trim($postdata['branch_id']);
            } else {
                $branch_id = "all";
            }
      }
}

if ($postdata['function_type'] === 'update_basic_salary') {
    if (!isset($postdata['update_data']) || !is_array($postdata['update_data'])) {
        errorreturn("update_data must be provided as an array.");
    }

    $updateData   = $postdata['update_data'];
    $response     = [];
    $currentDate  = date('Y-m-d');
    $currentTime  = date('H:i:s');

    foreach ($updateData as $index => $row) {
        $requiredFields = [
            'faculty_id',
            'branch_id',
            'net_salary_effect'
        ];

        // ✅ Validate required fields
        foreach ($requiredFields as $field) {
            if (!isset($row[$field]) || $row[$field] === '') {
                $response[] = [
                    "message" => "Missing field: $field"
                ];
                continue 2;
            }
        }

        try {
            // ✅ Check if record exists and fetch id + role/designation
            $checkSql = "SELECT id, role AS designation 
                         FROM other_staff_details 
                         WHERE institution_id = ? 
                           AND branch_id = ? 
                           AND faculty_id = ? 
                         LIMIT 1";
            $stmtCheck = $conn_rjllearning_specific->prepare($checkSql);
            $stmtCheck->execute([$institution_id, $row['branch_id'], $row['faculty_id']]);
            $existingData = $stmtCheck->fetch(PDO::FETCH_ASSOC);

            if ($existingData) {
                $existingId   = $existingData['id'];
                $designation  = $existingData['designation'];

                // ✅ Update existing record
                $sql = "UPDATE other_staff_details 
                        SET basic_salary = ?, 
                            added_by     = ?, 
                            date_created = ?, 
                            time_created = ? 
                        WHERE id = ?";
                $stmt = $conn_rjllearning_specific->prepare($sql);
                $stmt->execute([
                    $row['net_salary_effect'],
                    $username,
                    $currentDate,
                    $currentTime,
                    $existingId
                ]);

                // ✅ Insert log entry
                $logSql = "INSERT INTO staff_logs 
                           (institution_id, branch_id, faculty_id, basic_salary, designation, date_created, time_created, status) 
                           VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
                $stmtLog = $conn_rjllearning_specific->prepare($logSql);
                $stmtLog->execute([
                    $institution_id,
                    $row['branch_id'],
                    $row['faculty_id'],
                    $row['net_salary_effect'],
                    $designation,
                    $currentDate,
                    $currentTime,
                    1
                ]);

                // ✅ Success response as string
                $response = "Salary updated successfully";

            } else {
                // ✅ Record not found response
                $response[] = [
                    "message" => "Record not found for faculty_id {$row['faculty_id']}"
                ];
            }

        } catch (PDOException $e) {
            errorreturn("Error: " . $e->getMessage());
        }
    }

    successreturn($response);
}
