Uname:Linux ip-11-115-0-196 6.8.0-1039-aws #41~22.04.1-Ubuntu SMP Thu Sep 11 10:54:48 UTC 2025 x86_64

403WebShell
403Webshell
Server IP : 13.126.101.145  /  Your IP : 216.73.217.47
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux ip-11-115-0-196 6.8.0-1039-aws #41~22.04.1-Ubuntu SMP Thu Sep 11 10:54:48 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.3.17
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/rentals_updated/wp-content/plugins/api-phone/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/rentals_updated/wp-content/plugins/api-phone/apiphone.php
<?php

/**
 * Plugin Name: API For Smart-Phones.
 * Description: Custom API for Smart Phones.
 * Version: 1.2.5
 * Author: Itrosys
 * 
 */


// ini_set('log_error','On');
// ini_set('display_errors', 'On');
// Operator application APIs
add_action("rest_api_init", "api_smart_phone");

$key2 = "NQPwRJMe0ogMWL8e2cl7pgElt8vaAWf=";
$iv = substr($key2, 0, 16);
// $host = "http://192.168.11.133/gmmco4";
// $host = "https://gmmco.devitrosys.com";
$host = "https://uatcatrentals.gmmco.in";
function api_smart_phone()
{
    $p_commonPath = "api/user";
    $p_user = "user";
    $p_product = "product";
    $p_api = "api";

    /**Operator base */
    $p_commonPathOperator = "api/operator";
    $p_apiuser = "api/user";
    $p_apiproduct = "$p_api/$p_product";
    /** Get OTP API */
    register_rest_route($p_commonPath, "getotp", array(
        'methods' => 'POST',
        'callback' => 'getotpf',
        'permission_callback' => function () {
            return true;
        }
    ));
    /** OTP verification API */
    register_rest_route(
        $p_commonPath,
        "verifyotp",
        array(
            'methods' => 'POST',
            'callback' => 'verifyotpf',
            'permission_callback' => function () {
                return true;
            }
        )
    );


    /**
     * List all Equipments
     */
    register_rest_route($p_apiproduct, 'getequipmentslist', array('methods' => 'GET', 'callback' => 'getequipmentslist'));

    /**Login API */
    register_rest_route($p_commonPath, "login", array('methods' => "POST", "callback" => "wc_userlogin"));

    /**New password create API */
    register_rest_route($p_commonPath, "updatePassword", array('methods' => 'POST', 'callback' => 'updatePasswordf'));

    /**Registration API */
    register_rest_route($p_commonPath, "register", array('methods' => 'POST', 'callback' => "wc_adduser"));

    /**get user details API */
    register_rest_route($p_commonPath, "userDetailsById", array('methods' => 'POST', 'callback' => "userDetailsByIdf"));

    /**get user details update API */
    register_rest_route($p_commonPath, "updateProfile", array('methods' => 'POST', 'callback' => "updateProfilef"));
    register_rest_route($p_commonPath, "v2/updateProfile", array('methods' => 'POST', 'callback' => "updateProfileV2"));

    /**get user details API */
    register_rest_route($p_commonPath, "getStatesWithCode", array('methods' => 'POST', 'callback' => "getStatesWithCodef"));

    /**Notification token update API */
    register_rest_route($p_commonPath, "notificationToken", array('methods' => 'PUT', 'callback' => 'updateNotificationToken'));

    /**Product dropdown API */
    register_rest_route($p_apiproduct, "productsDropdown", array('methods' => 'POST', 'callback' => 'getproductsDropdown'));

    /**Product get filter API */
    register_rest_route($p_apiproduct, "getFilters", array('methods' => 'GET', 'callback' => 'getFiltersf'));

    /** Enquiry form to set lead */
    register_rest_route($p_apiproduct, "Enquiry", array('methods' => 'POST', 'callback' => 'enquiryFunction'));

    /** Enquiry form to get lead */
    register_rest_route($p_apiproduct, "getMyEqnuries", array('methods' => 'POST', 'callback' => 'getMyEqnuriesf'));

    /** Enquiry get buy enquiry products */
    register_rest_route($p_apiproduct, "getMyBuyEqnuries", array('methods' => 'POST', 'callback' => 'getMyBuyEqnuriesf'));

    /**Customer application */
    /**Operator login */
    register_rest_route($p_commonPathOperator, "login", array('methods' => "POST", "callback" => "wc_userloginOperator"));

    /**New password create API */
    register_rest_route($p_commonPathOperator, "updatePassword", array('methods' => 'POST', 'callback' => 'updatePasswordfOperator'));

    /**Get Logsheet of operator */
    register_rest_route($p_commonPathOperator, "getLogsheet", array('methods' => 'POST', 'callback' => 'getlogsheetf'));

    /**Get Logsheet of operator to approve by customer */
    register_rest_route($p_commonPathOperator, "getLogsheetByOrder", array('methods' => 'POST', 'callback' => 'getLogsheetByOrderf'));

    /**Get Logsheet for approval */
    register_rest_route($p_commonPath, "getLogsheetForApproval", array('methods' => 'POST', 'callback' => 'getLogsheetForApprovalf'));


    register_rest_route($p_commonPathOperator, 'getOperatorMachineAndInspection', array(
  'methods' => 'POST',
  'callback' => 'getOperatorMachineAndInspectionf',
  'permission_callback' => function() { return true; },
));


    /**Get Logsheet for approval */
    register_rest_route($p_commonPath, "approvelogbulk", array('methods' => 'POST', 'callback' => 'approvelogbulkf'));

    /** approve logs by customer */
    register_rest_route($p_commonPath, "approvelog", array('methods' => 'POST', 'callback' => 'saveLogsApprovef'));
    /**save logs */
    register_rest_route($p_commonPathOperator, "saveLogs", array('methods' => 'POST', 'callback' => 'saveLogsf'));

    /**Get Logsheet of operator */
    register_rest_route($p_commonPathOperator, "getServiceRequest", array('methods' => 'POST', 'callback' => 'getServiceRequestf'));

    /**save service request */
    register_rest_route($p_commonPathOperator, "saveServiceRequest", array('methods' => 'POST', 'callback' => 'saveServiceRequestf'));

    /**get Assigned data */
    register_rest_route($p_commonPathOperator, "getAssignedData", array('methods' => 'POST', 'callback' => 'getAssignedDataf'));

    /**check application updates */
    register_rest_route($p_api . "/" . $p_user, "checkAppUpdate", array("methods" => "POST", "callback" => "checkAppUpdatef"));

    /**update new update apk */
    register_rest_route($p_api . "/" . $p_user, "checkAppUpdateup", array("methods" => "POST", "callback" => "checkAppUpdateupf"));

    /**sos request api */
    register_rest_route($p_commonPathOperator, "sos", array('methods' => 'POST', 'callback' => 'sosf'));

    // {base_url}/wp-json/api/product/addToCart
    /** Add to Cart */
    register_rest_route($p_apiproduct, "addToCart", array('methods' => "POST", "callback" => "addToCartf"));

    /**user request for quote */
    register_rest_route($p_apiproduct, "rfq", array('methods' => 'POST', 'callback' => 'rfqf'));
    /**user download statndard quote in RFQ */
    register_rest_route($p_apiproduct, "rfq_downloadQuote", array('methods' => 'POST', 'callback' => 'rfq_downloadQuotef'));

    /**user download statndard quote in RFQ */
    register_rest_route($p_apiproduct, "quote_downloadQuote", array('methods' => 'POST', 'callback' => 'quote_downloadQuotef'));

    /**show request quotes */
    register_rest_route($p_apiproduct, "showRFQ", array('methods' => 'POST', 'callback' => 'showRfqf'));

    /**show  quotes List*/
    register_rest_route($p_apiproduct, "showMyQuotesList", array('methods' => 'POST', 'callback' => 'showMyQuotesListf'));
    /** add request for revision  */
    register_rest_route($p_apiproduct, "requestForRevision", array('methods' => 'POST', 'callback' => 'requestForRevisionf'));
    /**show my agreements List*/
    register_rest_route($p_apiproduct, "showMyAgreements", array('methods' => 'POST', 'callback' => 'showMyAgreementsf'));

    /**show my agreements List*/
    register_rest_route($p_apiproduct, "uploadMySignedPdf", array('methods' => 'POST', 'callback' => 'uploadMySignedPdff'));

    /**show my orders List*/
    register_rest_route($p_apiproduct, "showOrdersList", array('methods' => 'POST', 'callback' => 'showOrdersListf'));

    /**get products by categoryId*/
    register_rest_route($p_apiproduct, "getcategories", array('methods' => 'POST', 'callback' => 'getCategories'));

    /**get products by categoryId*/
    register_rest_route($p_apiproduct, "getProducts", array('methods' => 'POST', 'callback' => 'getProductsf'));

    /** get products grid for main page */
    register_rest_route($p_apiproduct, "mainPageProductsGrid", array('methods' => 'POST', 'callback' => 'mainPageProductGrid', 'permission_callback' => function () {
        return true;
    }),);

    /**Get product By Id */
    register_rest_route($p_apiproduct, "getProductById", array('methods' => 'POST', 'callback' => 'getProductByIdf'));

    /**Get product by multiple ids  */
    register_rest_route($p_apiproduct, "getProductsByIds", array('methods' => 'POST', 'callback' => 'getProductsByIdsf'));


    /**update quotation - accept the quote */
    register_rest_route($p_apiproduct, "acceptMyQuote", array('methods' => 'POST', 'callback' => 'acceptMyQuotef'));

    /**update quotation - accept the quote */
    register_rest_route($p_apiproduct, "addWishlist", array('methods' => 'POST', 'callback' => 'addWishlistf'));

    /**update quotation - accept the quote */
    register_rest_route($p_apiproduct, "addCartlist", array('methods' => 'POST', 'callback' => 'addCartlistf'));

    /**get dashboard tiles count api */
    register_rest_route($p_commonPath, "getDashCount", array('methods' => 'POST', 'callback' => 'getDashCountf'));


    /**get dashboard tiles count api */
    register_rest_route($p_commonPath, "delMyAcc", array('methods' => 'POST', 'callback' => 'delMyAccf'));

    /**get Notifications */
    register_rest_route($p_commonPath, "getNotification", array('methods' => 'POST', 'callback' => 'getNotificationf'));

    /** make notification read */
    register_rest_route($p_commonPath, "updateNotificationStatus", array('methods' => 'POST', 'callback' => 'updateNotificationStatus'));

    /**get Invoices */
    register_rest_route($p_commonPath, "getInvoices", array('methods' => 'POST', 'callback' => 'getInvoicesf'));

    /**get getCartProducts */
    register_rest_route($p_commonPath, "getCartProducts", array('methods' => 'POST', 'callback' => 'getCartProductsf'));

    /**saveExpenseRequest */
    register_rest_route($p_commonPathOperator, "saveExpenseRequest", array('methods' => 'POST', 'callback' => 'saveExpenseRequestf'));

    /**getExpension */
    register_rest_route($p_commonPathOperator, "getExpension", array('methods' => 'POST', 'callback' => 'getExpensionf'));

    /**Testing api */
    register_rest_route($p_apiproduct, "test", array('methods' => 'POST', 'callback' => 'testf',  'permission_callback' => '__return_true',));


    /**Testing api */
    register_rest_route($p_apiproduct, "createOrder", array('methods' => 'POST', 'callback' => 'createOrderf',  'permission_callback' => '__return_true',));


    /**Testing api */
    register_rest_route($p_apiproduct, "createOrderAfterPayment", array('methods' => 'POST', 'callback' => 'createOrderAfterPayment'));

}
// $filename = '/Applications/XAMPP/xamppfiles/htdocs/gmmco/wp-content/plugins/api-phone/log.txt';


function decryptFile($key, $iv, $s)
{

    $encrypter = 'aes-256-cbc';
    $st = openssl_decrypt($s, $encrypter, $key, 0, $iv);
    return $st;
}
function encryptFile($key, $iv, $s)
{

    $encrypter = 'aes-256-cbc';
    $st = openssl_encrypt($s, $encrypter, $key, 0, $iv);
    return $st;
}


/**
 * Get OTP
 * 
 *  WP_REST_Request $name Send mobile number.
 * return array $args.
 */
function getotpf($request)
{
    // return "test resutl slfjds lds fsf";
 $parametresen = json_decode($request->get_body(), true); // <-- safest way
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }


    // $parametresen =  $request->get_body_params() ?? array();
    // $parametres =  decryptdaata($parametresen['params']);
    global $wpdb;
    $mobileNumber = $parametres['mobileNumber'];
    $type = $parametres['type'] ?? '';
    $role = $parametres['role'];
    $otp = rand(1111, 9999);
    // return new WP_REST_Response("test resulty slfj lsfldlf jd $mobileNumber , $otp", 200);
    // exit(0);
    $table_name = 'wp_otp_verification';
    $date = date('Y-m-d H:i:s');

    if (!preg_match('/^[6789]\d{9}$/', $mobileNumber, $output_array)) {
        return new WP_Error(400, 'Please enter valid mobile number');
    }
    $data = array(
        'mobile_number' => $mobileNumber,
        'otp' => $otp,
        'otp_createdon' => $date,
        'otp_status' => 0
    );
    $resp = array();
    if ($type == 'forgotpassword' || $type == "mobilelogin") {
        $table_namemeta = $wpdb->prefix . "usermeta";
        $sql = "SELECT user_id from $table_namemeta where meta_key=%s and meta_value=%s";

        $user_id = $wpdb->get_var($wpdb->prepare($sql, 'user_phone', $mobileNumber));
        if ($user_id) {
            $resp['user_id'] = $user_id;
        } else {
            return new WP_REST_Response(array('message' => "Mobile number not registered."), 400);
        }
    } else if ($type == "register") {
        $table_namemeta = $wpdb->prefix . "usermeta";
        $sql = "SELECT user_id from $table_namemeta where meta_key=%s and meta_value=%s";
        $user_id = $wpdb->get_var($wpdb->prepare($sql, 'user_phone', $mobileNumber));
        if ($user_id) {
            return new WP_REST_Response(array('message' => "Mobile number already registered. Please login. "), 400);
        }
    } else if ($type == "resendOtp") {
    } else {
        return new WP_REST_Response(array('message' => 'Request type is required.', 'reason' => $wpdb->last_error), 409);
    }
    $first_name = get_user_meta($user_id, 'first_name', true);
    $sql = "SELECT mobile_number,otp FROM " . $table_name . " WHERE mobile_number='$mobileNumber'";
    $countPhone = $wpdb->get_results($sql, ARRAY_A);

    if ($wpdb->last_error) {

        return new WP_REST_Response(array('message' => 'Unable to preceed check otp. Please try later.', 'reason' => $wpdb->last_error), 409);
    }
    if (count($countPhone) > 0) {
        if ($type == "resendOtp") {
            $otp = $countPhone[0]["otp"];
        }

        // return new WP_REST_Response(array("message"=> "$otp"),400);
        $data_update = array('otp' => $otp, 'otp_createdon' => $date, 'otp_status' => 0);
        $data_where = array('mobile_number' => $mobileNumber);
        $res = $wpdb->update($table_name, $data_update, $data_where);
        if ($wpdb->last_error) {

            return new WP_REST_Response(array('message' => 'Unable to update. Please try later.', 'reason' => $wpdb->last_error), 409);
        }
    } else {
        $res = $wpdb->insert($table_name, $data);
        if ($wpdb->last_error) {
            return new WP_REST_Response(array('message' => 'Unable to save and proceed OTP. Please try later.', 'reason' => $wpdb->last_error), 409);
        }
    }
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => 'http://boancomm.net/boansms/boansmsinterface.aspx',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => 'mobileno=' . $mobileNumber . '&smsmsg=Dear%20Customer%20' . $otp . '%20is%20Gmmco%20Ltd%20OTP%20to%20verify%20your%20mobile%20number%20for%20Website%20related%20services%20to%20reach%20you&uname=gmmco&pwd=gmmco11&pid=1194',
        CURLOPT_HTTPHEADER => array(
            'Content-Type: application/x-www-form-urlencoded'
        ),
    ));
    $response = curl_exec($curl);
    if (curl_errno($curl)) {
        $err = curl_error($curl);
    }
    curl_close($curl);

    if ($response) {

        $resp1  = $resp + array('message' => "Hi " .  $first_name . ' Your OTP sent to your mobile number.', 'success' => 1, 'otp' => $otp);
        $encrypted = encryptdaata($resp1);
        return new WP_REST_Response($encrypted, 200);
    } else {
        return new WP_REST_Response(array('message' => 'Error Occurs!!!', 'reason' => $err), 400);
    }
}


function verifyotpf($request)
{
    $parametresen = json_decode($request->get_body(), true); // <-- safest way
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }
    // $parametresen =  $request->get_body_params() ?? array();
    // $parametres =  decryptdaata($parametresen['params']);
    global $wpdb;
    $mobileNumber = $parametres['mobileNumber'];
    $otp = $parametres['otp'];
    $tablename = 'wp_otp_verification';
    if (!preg_match('/^[6789]\d{9}$/', $mobileNumber, $output_array)) {
        return new WP_Error(400, 'Please enter valid mobile number');
    }

    // if (strlen($mobileNumber) != 10) {
    //     return new WP_REST_Response(array('message' => 'Please enter valid mobile number',), 400);
    // }
    if (strlen($otp) != 4) {
        return new WP_REST_Response(array('message' => 'OTP required',), 400);
    }
    $sql = "SELECT mobile_number FROM $tablename WHERE mobile_number = '" . $mobileNumber . "' and otp ='" . $otp . "' and otp_status = 0";

    $result = $wpdb->get_results($sql);

    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Error in getting data from db', 'reason' => $wpdb->last_error), 400);
    }
    if (count($result) == 1) {
        // $table_name = 'wp_otp_verification';
        $data_update = array('otp_status' => 2);
        $data_where = array('mobile_number' => $mobileNumber);
        $res = $wpdb->update($tablename, $data_update, $data_where);
        if ($wpdb->last_error) {
            return new WP_REST_Response(array('message' => 'Error in getting data from db', 'reason' => $wpdb->last_error), 400);
        }
        // $wpdb->close();
        if ($res) {
            $resp = array();

            $resp['message'] = 'OTP Verified successfully.';
            $resp['success'] = 1;
            $encrypted = encryptdaata($resp);
            return new WP_REST_Response($encrypted, 200);
        } else {
            return new WP_REST_Response(array('message' => 'Error Occurs!!!'), 400);
        }
    } else if (count($result) == 0) {
        $res = $wpdb->get_results("SELECT mobile_number FROM $tablename WHERE mobile_number = '" . $mobileNumber . "' and otp ='" . $otp . "' and otp_status = 1");
        if (count($res) == 1) {
            return new WP_REST_Response(array('message' => 'Otp Expired. Try again'), 400);
        } else {
            return new WP_REST_Response(array('message' => 'Invalid OTP'), 400);
        }
    }
}
function wc_userlogin($request)
{
    $parametresen = json_decode($request->get_body(), true);
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }


    // $response = array();
    // $parametresen =  $request->get_body_params() ?? array();
    // $parametres =  decryptdaata($parametresen['params']);
    // return $parametres;

    $username = sanitize_user(trim($parametres['username']));
    $password = sanitize_user(trim($parametres['password']));
    $login_type = sanitize_user(trim($parametres['login_type']));
    $userid =  sanitize_user(trim($parametres['user_id']));
    $appId = sanitize_user(trim($parametres['appId']));
    $device_id = sanitize_user(trim($parametres['device_id']));

    if (empty($login_type) || empty($login_type)) {
        return new WP_REST_Response(array('message' => 'Login type required'), 400);
    }
    global $wpdb;
    $table_invalidlogin = $wpdb->prefix . "invalidlogin";

    $loginSql = "SELECT * from $table_invalidlogin where  device_id='$device_id' and appid='$appId' and count>3 and date_time>NOW() - INTERVAL 10 MINUTE  order by id desc limit 1 ";
    $invlidresult = $wpdb->get_results($loginSql);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'something went wrong, try later.'), 400);
    }

    if ($invlidresult) {
        if (filter_var($username, FILTER_VALIDATE_EMAIL)) {

            $isuser = get_user_by('email', $username);
            $user_email =  $username;
            $subject = 'Security Alert: Multiple Failed Login Attempts';
            $message = "Hello, <br><br> We've detected <strong>3 failed login attempts</strong> on your account from this device.<br>
                If this wasn't you, we recommend resetting your password immediately.<br><br>
                <a href='" . wp_lostpassword_url() . "'>Reset Password</a><br><br>
                Regards, <br>GMMCO Security Team";
            $headers = array('Content-Type: text/html; charset=UTF-8');
            wp_mail($user_email, $subject, $message, $headers);
            return new WP_REST_Response(array('message' => 'You have tried login more than 3 times with invalid credentials. Please try after 10 minutes!!!.'), 400);
        } else {
            return new WP_REST_Response(array('message' => 'You have tried login more than 3 times with invalid credentials. Please try after 10 minutes!!!.'), 400);
        }
    }
    $loginsqlinsert = "INSERT INTO wp_invalidlogin (device_id, username, appid,count) SELECT * FROM (SELECT '$device_id', '$username', $appId,0) AS tmp WHERE NOT EXISTS ( SELECT device_id FROM wp_invalidlogin WHERE device_id = '$device_id' ) LIMIT 1";
    $wpdb->query($loginsqlinsert);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Something went wrong, try later....'), 400);
    }

    if ($login_type == "username") {
        if (empty($username) || empty($password)) {
            return new WP_REST_Response(array('message' => 'Username and password required'),   400);
        }
        $logindata = array('user_login' => $username, 'user_password' => $password, 'remember' => true);
        $user = wp_signon($logindata, false);
        if (is_wp_error($user)) {
            $wpdb->query("UPDATE $table_invalidlogin SET appId=$appId, username='$username', count=count+1 WHERE device_id='$device_id'");

            return new WP_REST_Response(array('message' => 'Invalid credentials. Try again with valid login credentials.'), 400);
        } else {
            $user_id = $user->ID;
            $user_meta = get_user_by('ID', $user_id);
            // $userdata = ["user_name" => $user_meta->first_name, 'last_name' => $user_meta->last_name, 'email' => $user->user_email, 'user_phone' => $user_meta->user_phone, 'nToken' => $user_meta->nToken, 'location' => $user_meta->location];
            $userdata = [
                "first_name" => $user_meta->first_name,
                'last_name' => $user_meta->last_name,
                'display_name' => $user_meta->display_name,
                'email' => property_exists($user_meta, 'user_email') ? $user_meta->user_email : '',
                'user_phone' => get_user_meta($user_id, 'user_phone', true),
                'nToken' => get_user_meta($user_id, 'nToken', true),
                'location' => get_user_meta($user_id, 'location', true),
                "id" => $user_id
            ];


            $response['userDetails'] = $userdata;
            $response['message'] = "User $username login successfully";

            $encrypted = encryptdaata($response);
            return new WP_REST_Response($response);
        }
    } else if ($login_type == "email") {
        //  die(json_encode($parametres));
        if (empty($username) || empty($password)) {
            return new WP_REST_Response(array('message' => 'Username and password required'),   400);
        }
        // return new WP_REST_Response(array('message' => 'a sdf dsf Username and password required'),   400);
        // try {
        $logindata = array('user_login' => $username, 'user_password' => $password, 'remember' => false);

        $user = wp_signon($logindata, false);
        // } catch (Exception $ex) {
        // die(json_encode($ex));
        // }
        // die(json_encode($parametres));
        if (is_wp_error($user)) {
            $wpdb->query("UPDATE $table_invalidlogin SET appId=$appId, username='$username', count=count+1 WHERE device_id='$device_id'");

            return new WP_REST_Response(array('message' => 'Invalid credentials. Try again with valid login credentials.'), 400);
        } else {
            // die(json_encode($parametres));
            if ($user) {
                $user_id = $user->ID;
                $user_meta = (object)get_userdata($user->ID);


                // $user_metaa = get_user_meta($user->ID); 9480492128
                // die("emailllll ".$user->user_email);
                // if($user_meta->email == null){
                //     return new WP_REST_Response(array('message' => 'Unable to login. Mail Id not exists in user detailas.'), 400);
                // }

                $userdata = [
                    "first_name" => $user_meta->first_name,
                    'last_name' => $user_meta->last_name,
                    'email' => $user_meta->user_email,
                    'display_name' => $user_meta->display_name,
                    'user_phone' => get_user_meta($user_id, 'user_phone', true),
                    'nToken' => get_user_meta($user_id, 'nToken', true),
                    'location' => get_user_meta($user_id, 'location', true),
                    "id" => $user_id
                ];
                $response['userDetails'] = $userdata;

                // $response['usermeta'] =  $user_meta;
                $response['message'] = "User $username login successful";
                $encrypted = encryptdaata($response);
                return new WP_REST_Response($response);
            } else {
                return new WP_REST_Response(array('message' => 'Unable to login now.' . $user->get_error_message()), 400);
            }
        }
    } else if ($login_type == "emailmob") {
        // global $wpdb;
        $table_namemeta = $wpdb->prefix . "usermeta";
        $sql = "SELECT user_id from $table_namemeta where meta_key=%s and meta_value=%s";
        $user_id = $wpdb->get_var($wpdb->prepare($sql, 'user_phone', $username));
        if ($user_id == null) {
            $wpdb->query("UPDATE $table_invalidlogin SET appId=$appId, username='$username', count=count+1 WHERE device_id='$device_id'");

            return new WP_REST_Response(array('message' => 'Not a valid login credential. Please enter valid mobile number and password', 'reason' => $wpdb->last_error), 400);
        }
        if ($wpdb->last_error) {
            return new WP_REST_Response(array('message' => 'Unable to fetch user details.', 'reason' => $wpdb->last_error), 409);
        }
        $user_meta =  (object) get_userdata($user_id);


        if ($user_meta) {
            $user_meta =  $user_meta->data;
            // die(json_encode($user_meta));
            // $user_emial =  property_exists($user_meta, 'user_email') ? 'sujaykniranjan@gmail.com' : '';
            $user_emial =  property_exists($user_meta, 'user_email') ? $user_meta->user_email : '';
            // die("userphonne  $user_emial");
            $logindata = array('user_login' => $user_emial, 'user_password' => $password, 'remember' => false);
            // die(json_encode($logindata));
            $user = wp_signon($logindata, false);
            if (is_wp_error($user)) {
                // $wpdb->close();
                return new WP_REST_Response(array('message' => 'Invalid credentials.'), 400);
            } else {
                // $wpdb->close();
                if ($user) {
                    if ($user_id != $user->ID) {
                        return new WP_REST_Response(array('message' => 'Unable to login with mobile please try with email and password'), 400);
                    }
                    // $user_meta = get_user_by('ID', $user->ID);
                    // $user_meta = get_user_meta($user->ID);
                    // die("emailllll ".$user->user_email);
                    // if($user_meta->email == null){
                    //     return new WP_REST_Response(array('message' => 'Unable to login. Mail Id not exists in user detailas.'), 400);
                    // }
                    $userdata = [
                        "first_name" => get_user_meta($user_id, 'first_name', true),
                        'last_name' =>  get_user_meta($user_id, 'last_name', true),
                        'email' =>  $user_emial,
                        'user_phone' => get_user_meta($user_id, 'user_phone', true),
                        'nToken' => get_user_meta($user_id, 'nToken', true),
                        'location' => get_user_meta($user_id, 'location', true),
                        "id" => $user_id
                    ];
                    $response['userDetails'] = $userdata;
                    $response['message'] = "User $username login successfully";
                    $encrypted = encryptdaata($response);
                    return new WP_REST_Response($response);
                } else {
                    return new WP_REST_Response(array('message' => 'Unable to login now.'), 400);
                }
            }
        } else {
            $wpdb->query("UPDATE $table_invalidlogin SET appId=$appId, username='$username', count=count+1 WHERE device_id='$device_id'");

            return new WP_REST_Response(array('message' => 'You are not an user please try with valid login credential.'), 400);
        }
    } else if ($login_type == "mobile") {
        if (empty($username) || empty($password)) {
            return new WP_REST_Response(array("message" => "Username and OTP required."), 400);
        }
        global $wpdb;
        $tablename = 'wp_otp_verification';
        // $sql = "sljfldsfkldsjflksd lfds jklfjds";
        $sql = "SELECT mobile_number FROM $tablename WHERE mobile_number = '" . $username . "' and otp ='" . $password . "' and otp_status = 0"; //
        // return new WP_REST_Response($sql,200);

        $result = $wpdb->get_results($sql);

        if ($wpdb->last_error) {
            return new WP_REST_Response(array('message' => 'Error in getting data from db', 'reason' => $wpdb->last_error), 400);
        }
        if (count($result) == 1) {
            // $table_name = 'wp_otp_verification';
            $data_update = array('otp_status' => 2);
            $data_where = array('mobile_number' => $username);
            $res = $wpdb->update($tablename, $data_update, $data_where);
            if ($wpdb->last_error) {
                return new WP_REST_Response(array('message' => 'Error in getting data from db', 'reason' => $wpdb->last_error), 400);
            }
            if ($res) {
                $table_namemeta = $wpdb->prefix . "usermeta";
                $sql = "SELECT user_id from $table_namemeta where meta_key=%s and meta_value=%s";
                $user_id = $wpdb->get_var($wpdb->prepare($sql, 'user_phone', $username));
                if ($wpdb->last_error) {
                    return new WP_REST_Response(array('message' => 'Unable to fetch user details.', 'reason' => $wpdb->last_error), 409);
                }
                if ($userid != $user_id) {

                    return new WP_REST_Response(array('message' => 'Invalid request method. Try later.',  'reason' => "user id not exists"), 400);
                }
                $user = get_user_by('ID', $user_id);
                // $wpdb->close();
                if ($user) {
                    // $user_meta = get_user_meta($user->ID);
                    // $userdata = ["user_name" => $user_meta->first_name, 'last_name' => $user_meta->last_name, 'email' => $user_meta->email, 'user_phone' => $user_meta->user_phone, 'nToken' => $user_meta->nToken, 'location' => $user_meta->location];
                    $userdata = [
                        "first_name" => $user->first_name,
                        'last_name' => $user->last_name,
                        'email' => $user->user_email,
                        'user_phone' => get_user_meta($user_id, 'user_phone', true),
                        'nToken' => get_user_meta($user_id, 'nToken', true),
                        'location' => get_user_meta($user_id, 'location', true),
                        "id" => $user_id
                    ];
                    $response['userDetails'] = $userdata;
                    $response['message'] = "User $username login successful";
                    $encrypted = encryptdaata(array('message' => 'Login successful', 'userDetails' => $userdata));
                    return new WP_REST_Response($encrypted, 200);
                } else {
                }
            } else {
                return new WP_REST_Response(array('message' => 'Verified OTP. Please try to login again'), 400);
            }
        } else {
            return new WP_REST_Response(array('message' => 'Invalid OTP. Please try again.'), 400);
        }
        // return new WP_REST_Response(array('message' => 'wait'), 400);
    } else {
        return new WP_REST_Response(array('message' => 'Login type not matched'), 400);
    }
}

/**update new password function updatePassword */
function updatePasswordf(WP_REST_Request $request)
{
      $parametresen = json_decode($request->get_body(), true); // <-- safest way
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }

    // $parametresen = $request->get_body_params();
    // $parametres =  decryptdaata($parametresen['params']);
    $otp = $parametres['otp'];
    $mobileNumber = $parametres['mobileNumber'];
    $upwd = $parametres['newpwd'];
    global $wpdb;
    $tablename = 'wp_otp_verification';
    $sql = "SELECT mobile_number FROM $tablename WHERE mobile_number = '" . $mobileNumber . "' and otp ='" . $otp . "' and otp_status = 0";
    // die($sql);
    $result = $wpdb->get_results($sql);
    // die(json_encode($result));
    if ($wpdb->last_error) {

        return new WP_REST_Response(array('message' => 'Error in getting data from db', 'reason' => $wpdb->last_error), 400);
    }
    if (count($result) == 1) {

        $table_namemeta = $wpdb->prefix . "usermeta";
        $sql = "SELECT user_id from $table_namemeta where meta_key=%s and meta_value=%s";
        $user_id = $wpdb->get_var($wpdb->prepare($sql, 'user_phone', $mobileNumber));
        if( !$user_id ){
          return new WP_REST_Response(array('message' => 'User not found!!!'), 409);
        }
        $user = get_user_by('ID', $user_id);
        if ($user) {
            wp_set_password($upwd, $user_id);

            $encrypted = encryptdaata(array('message' => 'Password updated. Please login again using new password.', 'success' => 1, 'user_id' => $user->ID));
            return new WP_REST_Response($encrypted, 200);
        } else {
            return new WP_REST_Response(array('message' => 'User not found!!!'), 409);
        }
    } else if (count($result) == 0) {
        $res = $wpdb->get_results("SELECT mobile_number,otp FROM $tablename WHERE mobile_number = '" . $mobileNumber . "' and otp ='" . $otp . "' and otp_status <> 2");

        if (count($res) == 1) {
            $dbotp = $res[0]['otp'];
            // if($dbotp != $otp){
            //     return new WP_REST_Response(array('message' => 'Otp Expired. Try again'), 400);
            // }
            return new WP_REST_Response(array('message' => 'Otp not verified. Verify first then update password.'), 400);
        } else {
            return new WP_REST_Response(array('message' => 'Invalid OTP'), 400);
        }
    }
}

/** User register function. addUser */
function wc_adduser($request = null)
{

    $response = array();
    //print_r($request);
    $parametresen = $request->get_body_params();
    $parameters =  decryptdaata($parametresen['params']);
    // print_r( $parameters );

    $first_name = sanitize_user($parameters['first_name']);
    $last_name = sanitize_user($parameters['last_name']);
    $email = sanitize_email($parameters['email']);
    $password = sanitize_text_field($parameters['password']);
    $user_phone = wc_sanitize_phone_number($parameters['mobileNumber']);
    $location = sanitize_user($parameters['location']);
    $place = sanitize_user($parameters['place']);
    $district = sanitize_user($parameters['district']);
    // $product_name = sanitize_user($parameters['product_name']);
    // $remarks = sanitize_user($parameters['remarks']);
    $nToken = sanitize_user($parameters['nToken']);

    if (empty($first_name)) {
        return new WP_Error(400, 'First Name is required');
    }
    if (empty($last_name)) {
        return new WP_Error(400, 'Last Name is required');
    }
    if (empty($email)) {
        return new WP_Error(400, 'Email is required');
    }
    if (strlen($password) < 8) {
        return new WP_Error(400, 'Password minimum 8 characters required.' . $password);
    }
    if (empty($user_phone)) {
        return new WP_Error(400, 'Mobile number is required');
    }
    if (empty($location)) {
        return new WP_Error(400, 'Location is required');
    }
    if (wp_verify_nonce($parameters['nonce'], 'woocommerce-register')) {
        return new WP_Error(409, 'Invalid Data');
    }

    global $wpdb;

    $table_namemeta = $wpdb->prefix . "usermeta";
    $sql = "SELECT user_id from $table_namemeta where meta_key=%s and meta_value=%s";

    $user_idmob = $wpdb->get_var($wpdb->prepare($sql, 'user_phone', $user_phone));
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to check user details.', 'reason' => $wpdb->last_error), 409);
    }


    $username = strtolower($first_name);
    $user_id = username_exists($username);
    if ($user_id) {
        $i = 0;
        do {
            $username .= rand(10, 99);
            $user_id = username_exists($username);
            $i++;
        } while ($user_id && $i < 2);
    }
    if (!$user_id && email_exists($email) == false) {
        // echo "$username , $password, $email";
        $user_id = wp_create_user($username, $password, $email);
        $displyname = strtoupper("$first_name $last_name");
        wp_update_user(array('ID' => $user_id, 'display_name' => $displyname));
        if (!is_wp_error($user_id)) {

            $user = get_user_by('id', $user_id);
            $user->set_role('customer');
            $user->display_name = $first_name . " " . $last_name;

            update_user_meta($user_id, 'first_name', $first_name);
            update_user_meta($user_id, 'last_name', $last_name);
            update_user_meta($user_id, 'email', $email);
            update_user_meta($user_id, 'location', $location);
            update_user_meta($user_id, 'user_place', $place);
            update_user_meta($user_id, 'user_district', $district);
            // update_user_meta($user_id, 'product_name', $product_name);
            // update_user_meta($user_id, 'remark', $remarks);
            update_user_meta($user_id, 'user_phone', $user_phone);
            update_user_meta($user_id, 'user_otp', '');
            update_user_meta($user_id, 'nToken', $nToken);
            update_user_meta($user_id, 'user_otp_verified', 0);
            wp_new_user_notification($user_id, '', 'yes');
            $user_info = get_userdata($user_id);
            if ($user_info) {
                $response = array();
                $response['message'] = sprintf(__("User '%s' registration is successful", 'wp-rest-user'), $user_info->user_login);
                $response['id'] = $user_info->ID;
                $response['success'] = 1;
            }
        } else {
            return new WP_Error(409, "Email already exists, please try login1");
        }
        // $encrypted = encryptdaata($response);
        return new WP_REST_Response($response, 200);
    } else {
        return new WP_REST_Response(array("message" => "Email already exists, please try login2"), 409);
    }
}

function updateNotificationToken($request)
{
    $parametresen = $request->get_body_params();
    $parameters =  decryptdaata($parametresen['params']);
    $user_id = $parameters["user_id"];
    $token = $parameters["token"];
    if (empty($user_id) || empty($token)) {
        return new WP_Error(400, "User Id and token are required.");
    }
    global $wpdb;
    $table_name = 'wp_usermeta';
    $result = $wpdb->get_results("SELECT * from $table_name where meta_key='nToken' and user_id='$user_id'", ARRAY_A);
    if (count($result) == 1) {
        $up_data = array('meta_value' => $token);
        $up_where = array('user_id' => $user_id, 'meta_key' => 'nToken');
        $result = $wpdb->update($table_name, $up_data, $up_where);
    } else if (count($result) == 0) {
        $result = update_user_meta($user_id, 'nToken', $token);
    } else {
        return new WP_REST_Response(array('message' => 'Duplicate account found'), 409);
    }
    if ($result) {
        $response = array('message' => 'Notification updated.', 'success' => 1);
        // $encrypted = encryptdaata($response);
        return new WP_REST_Response($response, 200);
    } else {
        $response = array('message' => 'Error occured.', 'success' => 0);
        // $encrypted = encryptdaata($response);
        return new WP_REST_Response($response, 123);
    }
}
function getproductsDropdown($request)
{

    // $encdata = "raju-av-raju";
    // $st = encryptdaata($encdata);
    // $decodedd = decryptdaata($st);
    // echo "\n-- decrypt---";
    // return $decodedd;



    $parametresen = $request->get_body_params();

    $parametres =  decryptdaata($parametresen['params']);
    $searchName = $parametres['searchName'] ?? '';
    $termtype = $parametres['type'] ?? 'rent';

    $args = array(
        'limit' => -1,
        'orderby' => 'name',
        'order' => 'DESC',
        'tax_query' => array(
            array(
                'taxonomy' => 'product_cat',
                'field' => 'name',
                'terms' => $termtype,
                // 'field'    => 'id',
                // 'terms'    => 100,
            ),
        ),
        'meta_query' => array(
            array(
                'key' => 'purpose_of_listing',
                'value' => 'Display',
                'compare' => '='
            )
        )
    );
    // echo "\n" . json_encode($args) . "\n";
    $query = new WC_Product_Query($args);
    $products = $query->get_products();

    $thisProducts = [];
    foreach ($products as $product) {

        // $result1["rentprice"] = $product->get_price_suffix() . "" . $product->get_price();
        // $result1["rentpricePerPeriod"] = "(8 Hours/day)";
        $thisProducts[] = [
            'id' => $product->id,
            "rentpricePerPeriod" => "(8 Hours/day)",
            'slug' => $product->slug,
            "rentprice" => $product->get_price_suffix() . "" . $product->get_price(),
            'name' => $product->name,
            'image' => wp_get_attachment_thumb_url($product->get_image_id())
        ];
    }


    $encryped = encryptdaata(["data" => $thisProducts]);
    return new WP_REST_Response($encryped, 123);

    /**
     * not using bellow code
     */
    $tablename = "wp_posts";
    global $wpdb;
    $sql = "SELECT ID,post_title FROM $tablename WHERE post_type='product' and post_title like '%$searchName%' group by post_title ";
    // die($sql);
    $result = $wpdb->get_results($sql, ARRAY_A);
    if ($wpdb->last_error) {
        $resulte =  array('message' => 'Unable to get products list');
        return new WP_REST_Response($resulte, 400);
    }
    try {
        foreach ($result as $key => $value) {
            $product = wc_get_product($value["ID"]);
            $result[$key]["id"] = (int) $value['ID'];
            //    $image = $product->get_image();
            //    $image->wc_get_attachment_image_attributes( attr )

            $imagepath =  wp_get_attachment_image_url($product->get_image_id());
            if ($imagepath) {
                $result[$key]["image"] = $imagepath;
            }
            $result[$key]['name'] = $product->get_name();
            $result[$key]["rentprice"] = $product->get_price_suffix() . "" . $product->get_price();
            $result[$key]["rentpricePerPeriod"] = "(8 Hours/day)";
            $result[$key]["slug"] = $product->get_slug();
            $result[$key]["stockStatus"] = $product->get_stock_status();
            $result[$key]["stockCount"] = $product->get_stock_quantity();
        }
    } catch (Exception $e) {
        $resulte = array("message" => $e->getMessage(), "code" => $e->getCode());
        return new WP_REST_Response($resulte, 400);
    }

    $encryped = encryptdaata(["data" => $result]);
    return new WP_REST_Response($encryped, 123);
}

function encryptdaata($s)
{
    // global $key2;
    // global $iv;
    // $je = json_encode($s);
    // $decodedd = encryptFile($key2, $iv, $je);
    // return $decodedd;
    return $s;
}

function decryptdaata($s)
{
    // global $key2;
    // global $iv;
    // // $je = json_encode($s);
    // // $st = encryptFile( $key2,$iv,$je);
    // $decodedd = decryptFile($key2, $iv, $s);
    // return json_decode($decodedd, true);
    return $s;
}
function getFiltersf($request)
{
    $parametresen = $request->get_body_params();
    $parameters =  decryptdaata($parametresen['params']);
    global $wpdb;
    $table_name = 'wp_postmeta';
    $result = $wpdb->get_results("SELECT meta_value as yard_location, count(*) as qty FROM $table_name WHERE meta_key='yard_location' and post_id in(SELECT ID from wp_posts WHERE post_type='product') GROUP by meta_value ", ARRAY_A);
    if ($wpdb->last_error) {
        return new WP_REST_Response(["message" => "Unable to fetch Yard/location"], 400);
    }
    $encrypted = encryptdaata(["yards" => $result, 'message' => '']);
    return new WP_REST_Response($encrypted, 200);
}
function getMyEqnuriesf($request): WP_REST_Response
{
    $parametresen = $request->get_body_params();
    $parametres =  decryptdaata($parametresen['params']);
    // print(json_encode($parametres));
    $date1 = $parametres['start_date'];
    $date2 = $parametres['end_date'];
    $user_id = $parametres['user_id'] ?? '';
    $lead_phone = $parametres['lead_phone'] ?? '';
    $page = $parametres['page'] ?? 1;
    $perpage = $parametres['perpage'] ?? 10;
    $limit = " limit $perpage";
    $daterange = "";
    if ($page > 1) {
        $perpage1 = $page * $perpage;
        $perpage1 = ($perpage1 - $perpage);
        $limit = " limit $perpage1,$perpage";
    }
    $datesBetween = "";
    if (empty($user_id) && empty($lead_phone)) {
        $resultdata = array("message" => "Please login or need lead phone numer to show your enquiries.");
        return new WP_REST_Response($resultdata, 400);
    }
    if (!empty($date1)  && !empty($date2)) {
        $limit = "";
        $datesBetween = "  date(lead_created_on) between '$date1' and '$date2' ";
    }
    if ($lead_phone != "") {
        $whereuserid = " lead_phone='$lead_phone' ";
    }
    if (!empty($user_id)) {
        if (!empty($lead_phone)) {
            $whereuserid = "  user_id='$user_id' or  (lead_phone='$lead_phone' and IFNULL(user_id,0)=0) ";
            // $whereuserid = "  user_id='$user_id' ";
        } else {
            $whereuserid = "  user_id='$user_id' ";
        }
    }
    global $wpdb;
    $table_name = "wp_leads";
    // $user_phone = get_user_meta($user_id,'user_phone',true);
    $whereQuery = $datesBetween .  (!empty($datesBetween) && !empty($user_id)) ?  " and $datesBetween  " : $whereuserid;
    $whereQuery =  !empty(trim($whereQuery)) ? " where $whereQuery " : "";
    // $rfqquery = "select * from $table_name where  $whereQuery order by id desc $limit";
    // $rfqquery = "SELECT * from $table_name  $whereQuery  order by id desc $limit";
    $rfqquery = "SELECT `id`,`user_id`,`lead_id`,`lead_number`,`full_name`,`lead_email`,`lead_phone`,`rental_startdate`,`rental_enddate`,product_name,subsidary_products,`location`,`region`,ba_remarks,remarks,en_status,lead_created_on,last_updated_on FROM $table_name  $whereQuery  ORDER BY id DESC $limit";
    // die($rfqquery);
    $results = $wpdb->get_results($rfqquery, ARRAY_A);
    if ($wpdb->last_error) {
        $resultdata = array("message" => "something went wrong.");
        return new WP_REST_Response($resultdata, 400);
    }
    if (count($results ?? []) > 0) {
        $results = $results ?? [];
        // for($i = 0; $i < count($results); $i++){
        //     $res  =  (object) $results[$i];
        //     $image = wp_get_attachment_image_src(get_post_thumbnail_id($res->product_id), 'thumbnail'); //'single-post-thumbnail');
        //     $results[$i]['image'] = $image;
        // }
        $resulta = array("data" => $results ?? [], 'success' => 1);
        $encrypted = encryptdaata($resulta);
        return new WP_REST_Response($resulta, 200);
    } else {
        if ($page > 1) {
            $resulta = array("data" => [], 'success' => 1);
            $encrypted = encryptdaata($resulta);
            return new WP_REST_Response($encrypted, 200);
        }
        $resultdata = array("message" => "No Enquiry requested yet. Raise a request for Enquiry.", 'success' => 0);
        return new WP_REST_Response($resultdata, 400);
    }
}

function getMyBuyEqnuriesf($request)
{
    $parametresen = $request->get_body_params();
    $parametres =  decryptdaata($parametresen['params']);

    $date1 = $parametres['start_date'];
    $date2 = $parametres['end_date'];
    $user_id = $parametres['user_id'] ?? '';
    $lead_phone = $parametres['lead_phone'] ?? '';
    $page = $parametres['page'] ?? 1;
    $perpage = $parametres['perpage'] ?? 10;
    $limit = " limit $perpage";
    $daterange = "";
    if ($page > 1) {
        $perpage1 = $page * $perpage;
        $perpage1 = ($perpage1 - $perpage);
        $limit = " limit $perpage1,$perpage";
    }
    $datesBetween = "";
    if (empty($user_id)) {
        $resultdata = array("message" => "Please login  to show your buy enquiries.");
        return new WP_REST_Response($resultdata, 400);
    }


    $whereuserid = "  user_id='$user_id' ";

    global $wpdb;
    $table_name = "wp_used_product_enquiry";
    $rfqquery = "SELECT * from $table_name WHERE $whereuserid  order by id desc $limit";

    $results = $wpdb->get_results($rfqquery, ARRAY_A);
    if ($wpdb->last_error) {
        $resultdata = array("message" => "something went wrong.");
        return new WP_REST_Response($resultdata, 400);
    }
    if (count($results ?? []) > 0) {
        $results = $results ?? [];
        // for($i = 0; $i < count($results); $i++){
        //     $res  =  (object) $results[$i];
        //     $image = wp_get_attachment_image_src(get_post_thumbnail_id($res->product_id), 'thumbnail'); //'single-post-thumbnail');
        //     $results[$i]['image'] = $image;
        // }
        $resulta = array("data" => $results ?? [], 'success' => 1);
        $encrypted = encryptdaata($resulta);
        return new WP_REST_Response($encrypted, 200);
    } else {
        if ($page > 1) {
            $resulta = array("data" => [], 'success' => 1);
            $encrypted = encryptdaata($resulta);
            return new WP_REST_Response($encrypted, 200);
        }
        $resultdata = array("message" => "No Enquiry requested yet. Raise a request for Enquiry.", 'success' => 0);
        return new WP_REST_Response($resultdata, 400);
    }
}

function enquiryFunction($request)
{
    $parametresen = $request->get_body_params();
    $parameters =  decryptdaata($parametresen['params']);
    // die(json_encode($parameters));
    $full_name = $parameters['full_name'];
    $lead_email = $parameters['lead_email'];
    $lead_phone = $parameters['lead_phone'];
    $location = $parameters['location'];
    $region = _getRegionLeads(strtolower($location));
    $product_name = $parameters['product_name'];
    $product_id = $parameters['product_id'];
    $subsidary_products = $parameters['subsidary_products'];
    $remarks = $parameters['remarks'];

    $menutype = $parameters['menutype'];



    if (empty($full_name)) {
        return new WP_Error(400, 'Full Name is required');
    }
    if (empty($lead_email)) {
        return new WP_Error(400, 'Lead Email is required');
    }
    if (empty($lead_phone)) {
        return new WP_Error(400, 'Lead Phone is required');
    }
    if (!preg_match('/^[6789]\d{9}$/', $lead_phone, $output_array)) {
        return new WP_Error(400, 'Please enter valid mobile number');
    }
    if (empty($location)) {
        return new WP_Error(400, 'Location is required');
    }
    if (empty($product_name)) {
        return new WP_Error(400, 'Product Name is required');
    }



    // return new WP_Error(400, 'testing stop...');
    global $wpdb;

    $date = date('Y-m-d H:i:s');

    $userId = 0;
    $user = get_user_by('email', $lead_email);

    if ($user) {
        $userId = $user->ID;
    }
    if ($menutype == 'rent') {
        $stdate = $parameters['start_date'];
        $enddate = $parameters['end_date'];
        $start_date = date("Y-m-d", strtotime($stdate));
        $end_date = date("Y-m-d", strtotime($enddate));
        $tablename = 'wp_leads';
        // to store data in leads table
        $result = $wpdb->insert($tablename, array(
            'full_name' => $full_name,
            'user_id' => $userId,
            'lead_email' => $lead_email,
            'lead_phone' => $lead_phone,
            'rental_startdate' => $start_date,
            'rental_enddate' => $end_date,
            'location' => $location,
            'region' => $region,
            'product_name' => $product_name,
            'subsidary_products' => $subsidary_products,
            'remarks' => $remarks,
            'lead_created_on' => $date
        ));
        $lastid = $wpdb->insert_id;
        // $lastid = $wpdb->insert_id;
        if ($wpdb->last_error) {
            return new WP_REST_Response(['message' => 'Something went wrong!. Please try later.' . $wpdb->last_error], 400);
        }


        if ($userId > 0) {
            create_notification(
                'User Raised An Enquiry',
                'User "' . $user->user_login . '" has raised an Enquiry in RMS Portal.',
                array(
                    'meta_input' => array(
                        'user_id' => $userId,
                        'action' => 'create_enquiry',
                    )
                )
            );
        } else {
            create_notification(
                'Visitor Raised An Enquiry',
                'Visitor "' . $full_name . '" has raised an Enquiry in RMS Portal.',
                array(
                    'meta_input' => array(
                        'user_id' => $full_name,
                        'action' => 'create_enquiry',
                    )
                )
            );
        }
        // send data to oracle crm api and get lead id
        if ($lastid > 0) {
            $curl = curl_init();
            $postData = array();
            $postData['Name'] = $full_name;
            $postData['Stage_c'] = "Lead";
            $postData['PrimaryContactPartyName'] = $full_name;
            $postData['PrimaryContactEmailAddress'] = $lead_email;
            $postData['PrimaryPhoneNumber'] = $lead_phone;
            $postData['ProductGroupName'] = $product_name;
            $postData['LeadType_c'] = "Ebiz";
            $postData['LeadSource_c'] = "RMS";
            $postData['EquipmentType_c'] = "Rental";
            $postData['Location_c'] = $location;
            $postData['Remarks_c'] = $remarks;
            $encodeJson = json_encode($postData);
            curl_setopt_array($curl, array(
                CURLOPT_URL => 'https://eiik-test.fa.em2.oraclecloud.com/crmRestApi/resources/11.13.18.05/leads',
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => '',
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 0,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => 'POST',
                CURLOPT_POSTFIELDS => $encodeJson,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json',
                    'Authorization: Basic ' . base64_encode("GMMRMS01:Gmm#rms01")
                ),
            ));



            $response = curl_exec($curl);
            $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
            // file_put_contents($filename, date('y-m-d H:i:s') . " params " . json_encode($parameters) . "\n", FILE_APPEND);
            if (curl_errno($curl)) {
                $error_msg = curl_error($curl);
                // file_put_contents($filename, date('y-m-d H:i:s') . " error: " . json_encode($error_msg) . "\n", FILE_APPEND);
            }

            curl_close($curl);
            $decode = json_decode($response, true);
            if ($httpcode == '201') {
                // oracle crm api response gets success update oracle crm lead id to rms leads table
                $update = $wpdb->update('wp_leads', array(
                    'lead_id' => $decode['LeadId'],
                    'lead_number' => $decode['LeadNumber'],
                    'lead_source' => "RMS",
                    'lead_type' => "Ebiz",
                    'equipment_type' => "Rental",
                    'crm_response' => $response,
                    'lead_created_on' => $date
                ), array('id' => $lastid));
                if ($update) {

                    /*
		            * Initialize phpmailer class*/
                    // global $phpmailer;
                    // $phpmailer->isSMTP();
                    // $phpmailer->Host = 'smtp.gmail.com';
                    // $phpmailer->SMTPAuth = true;
                    // $phpmailer->Port = 587;
                    // $phpmailer->Username = 'saravana.kumar@itrosys.com';
                    // $phpmailer->Password = 'qrqq mphx huer sngj';

                    // $phpmailer->SMTPSecure = 'TLS';
                    // $phpmailer->From = 'saravana.kumar@itrosys.com';
                    // // $phpmailer->From = 'raju.avs@itrosys.com';
                    // $phpmailer->FromName = 'Itrosys';
                    // // Add a recipient
                    // $phpmailer->addAddress($lead_email);

                    // $phpmailer->isHTML(true);

                    // // Email subject
                    // $phpmailer->Subject = 'Thank You for Your Request';
                    // $name = ucwords($full_name);
                    // // Email body content
                    // $mailContent = "<h1>Dear $name</h1>
                    // <p>Thanks for Visiting us, Your enquary is important for us, we have received your enquary which is being sent to concern person and he will be responding you very soon.</p>
                    // <p>Product Name: $product_name</p>
                    // <p>Thanks</p>
                    // <p>Team GRS</p>
                    // ";
                    // $phpmailer->Body = $mailContent;

                    // if (!$phpmailer->send()) {
                    //     // echo 'Message could not be sent.';
                    //     // echo 'Mailer Error: ' . $phpmailer->ErrorInfo;
                    $res = "Product enquiry updated and sent to Gmmco, Gmmco team will contact you.";
                    $encypted = encryptdaata(['message' => $res, 'success' => 1]);
                    return new WP_REST_Response($encypted, 200);
                    // } else {
                    //     $res = "Product enquiry updated to server and sent an email to your mail id and Gmmco team will contact you";
                    //     $encypted = encryptdaata(['message' => $res, 'success' => 1]);
                    //     return new WP_REST_Response($encypted, 200);
                    //     // exit;
                    // }
                } else {
                    // echo "Unable to update your enquiry"; // lead details update error
                    $res = "Product enquiry sent, Gmmco team will contact you.";
                    $encypted = encryptdaata(['message' => $res, 'success' => 1]);
                    return new WP_REST_Response($encypted, 200);
                    // return new WP_REST_Response(['message' => "Request sent to CRM. Unable to update enquiry."], 200);
                    // exit;
                }
            } else if ($httpcode == '400') {
                // echo $response; // oracle api errror

                $update = $wpdb->update('wp_leads', array(
                    'lead_id' => $decode['LeadId'] ?? '',
                    'lead_number' => $decode['LeadNumber'] ?? '',
                    'lead_source' => "RMS",
                    'lead_type' => "Ebiz",
                    'equipment_type' => "Rental",
                    'crm_response' => $response ?? '',
                    'lead_created_on' => $date ?? ''
                ), array('id' => $lastid));

                return new WP_REST_Response(['message' => $response], 400);
            }
        } else {
            return new WP_REST_Response(['message' => 'Something went wrong!. Please try later.'], 400);
        }
    } else if ($menutype == 'buy') {
        $offerprice = $parameters['offerprice'];
        $actualprice = $parameters['actualprice'];
        // Save to database
        $ardata = array(
            'first_name' => $full_name,
            'last_name' => '',
            'email' => $lead_email,
            'product_id' => intval($product_id),
            'user_id' => intval($userId),
            'product_name' => $product_name,
            'actual_price' => $actualprice,
            'offered_price' => $offerprice,
            'remarks' => $remarks,
            'status' => 'Request Received'
        );
        $insertRes =  $wpdb->insert(
            $wpdb->prefix . 'used_product_enquiry',
            $ardata,
            array('%s', '%s', '%s', '%d', '%d', '%s', '%f', '%f', '%s', '%s')
        );
        $lastid = $wpdb->insert_id;
        if (is_wp_error($insertRes)) {
            return new WP_REST_Response(['message' => 'Something went wrong!. Please try later.'], 400);
        }
        // In App Notification
        create_notification(
            'User make offer',
            'User "' . $full_name . '" make offer for  "' . $product_name . '" ',
            array(
                'meta_input' => array(
                    'user_id' => $userId,
                    'action' => 'User submited offer',
                )
            )
        );

        // $email_instance = new WC_Custom_Email_Used_Enquiry();
        // $email_instance->trigger($lastid, $ardata);
        $ajax_url = admin_url("admin-ajax.php");
        $nonce = wp_create_nonce("send_used_enquiry_email_nonce");
        $reqdata = [
            'action' => 'send_used_enquiry_email',
            'used_enquiry_id' => $lastid,
            'nonce' => $nonce
        ];
        $response = wp_remote_post($ajax_url, [
            'method' => 'POST',
            'body' => $reqdata
        ]);

        $encypted = encryptdaata(['message' => 'Your buy enquiry sent to Gmmco team.', 'success' => 1]);
        return new WP_REST_Response($encypted, 200);
    }
}
function getequipmentslist($request)
{
    global $wpdb;
    $res = $wpdb->get_results("SELECT * FROM wp_equipments");
    if ($res) {
        $response['code'] = 200;
        $response['message'] = 'Equipment Listed Successfully';
        $response['data'] = $res;
    } else {
        $response['code'] = 400;
        $response['message'] = 'Data Not Found';
    }
    $encypted = encryptdaata($response);
    return new WP_REST_Response($encypted, 123);
}


function _getRegionLeads($location)
{
    $south = ['Karnataka', 'Kerala'];
    $north = ['Madhya Pradesh', 'Chhattisgarh'];
    $east = ['Andhra Pradesh', 'Tamil Nadu', 'Telangana'];
    $west = ['Maharashtra', 'Goa'];

    $south = array_map('strtolower', $south);
    $north = array_map('strtolower', $north);
    $east = array_map('strtolower', $east);
    $west = array_map('strtolower', $west);


    if (in_array($location, $south)) {
        return 'South';
    } elseif (in_array($location, $north)) {
        return 'North';
    } elseif (in_array($location, $east)) {
        return 'East';
    } elseif (in_array($location, $west)) {
        return 'West';
    } else {
        return 'Other';
    }
}

/**Operator login */
function wc_userloginOperator($request = null)
{
    $parametresen =  $request->get_body_params() ?? array();
    $parametres =  decryptdaata($parametresen['params']);
    $username = sanitize_user(trim($parametres['username']));
    $password = sanitize_user(trim($parametres['password']));
    $login_type = sanitize_user(trim($parametres['login_type']));
    $appId = sanitize_user(trim($parametres['appId']));
    $device_id = sanitize_user(trim($parametres['device_id']));
    if ($login_type != "mobile") {
        return new WP_REST_Response(array('message' => 'Invalid login type' .  $login_type), 400);
    }
    if (empty($appId) || empty($device_id)) {
        return new WP_REST_Response(array('message' => 'Invalid request!!!.'), 400);
    }


    // $table_name = 'wp_otp_verification';
    global $wpdb;
    $table_namemeta = $wpdb->prefix . "usermeta";
    $table_invalidlogin = $wpdb->prefix . "invalidlogin";
    $table_user = 'wp_users';

    $loginSql = "SELECT * from $table_invalidlogin where  device_id='$device_id' and count>5 and date_time>NOW() - INTERVAL 10 MINUTE order by id desc limit 1 ";
    $invlidresult = $wpdb->get_results($loginSql);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'something went wrong, try later.'), 400);
    }
    if ($invlidresult) {
        return new WP_REST_Response(array('message' => 'You have tried login more than 5 times with invalid credentials. Please try after 10 minutes!!!.'), 400);
    }
    $loginsqlinsert = "INSERT INTO wp_invalidlogin (device_id, username, appid,count) SELECT * FROM (SELECT '$device_id', '$username', $appId,0) AS tmp WHERE NOT EXISTS ( SELECT device_id FROM wp_invalidlogin WHERE device_id = '$device_id' ) LIMIT 1";
    $wpdb->query($loginsqlinsert);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Something went wrong, try later....'), 400);
    }

    $sql = "SELECT a.* from $table_user a left join $table_namemeta b on a.ID=b.user_id where  b.meta_key='user_phone' and b.meta_value='$username' ";
    // die( $sql );
    // echo json_encode($sql);
    $result_d = new stdClass();
    $result1 = $wpdb->get_results($sql);
    foreach ($result1 as $userr) {
        $userdata = get_userdata($userr->ID);
        $roles = $userdata->roles;
        if (in_array('operator', $roles)) {
            $result_d = (object)$userr;
        }
    }

    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to fetch user details.', 'reason' => $wpdb->last_error), 409);
    }
    // return new WP_REST_Response(array('message' => json_encode($result_d)), 400);
    if (count((array)$result_d) > 0) {
        // $result_d = $result[0];
        // echo "result_d:" . json_encode($result_d);
        $id = (int) $result_d->ID;
        $user = get_user_by('ID', $id);
        $isPass = wp_check_password($password, $user->user_pass, $id);
        // $isPass =  wp_authenticate_email_password($user, $user->user_email, $password);
        if ($user && $isPass) {
            $user_metadata = (object) get_user_meta($user->ID);
            $customerdata = [];
            $machineassoc =  $user_metadata->machine_associated; //['machine_associated'][0];
            $product = get_post($machineassoc);
            $producttitle = $product->post_title;
            $user_data1 = get_userdata($id);
            $equipment_number = get_post_meta($machineassoc, 'equipment_number', true);
            $equipment_serial_number = get_post_meta($machineassoc, 'equipment_serial_number', true);

            /** order data */
            $contractId = get_user_meta((int)$id, 'contract_id', true);
            if (strlen(trim($contractId)) > 0) {
                $order = wc_get_order($contractId);
                if ($order) {

                    $stdt = $order->get_meta('start_date', true);
                    $enddt = $order->get_meta('end_date', true);
                    $isdateList = explode("-", $stdt);
                    if (is_array($isdateList)) {
                        if (strlen($isdateList[0]) == 2) {
                            $stdt = implode('-', array_reverse(explode('-', $stdt)));
                            $enddt = implode('-', array_reverse(explode('-', $enddt)));
                        }
                    }
                    $customerdata['start_date'] = $stdt; // wc_get_order_item_meta($contractId, 'start_date',true);
                    $customerdata['end_date'] = $enddt; //wc_get_order_item_meta($contractId, 'end_date',true);
                    $customerdata['order_status'] =  $order->get_status();
                    $customerdata['order_id'] = $contractId;
                    $oitems =  $order->get_items(); // woocommerce_get_product_from_item();
                    foreach ($oitems as $key => $oitem) {
                        $orderItemData =  $order->get_item($key);
                        if ($orderItemData) {
                            $machineassoc = $orderItemData['product_id'];
                            $producttitle = $orderItemData['name'];
                            $equipment_number = get_post_meta($machineassoc, 'equipment_number', true);
                            $equipment_serial_number = get_post_meta($machineassoc, 'equipment_serial_number', true);
                        }
                    }
                }
            }
            /** end order data
             */
            $wpdb->query("UPDATE $table_invalidlogin SET count=0,appId=$appId where device_id='$device_id'");
            if ($wpdb->last_error) {
                die(json_encode("error: " . $wpdb->last_error));
            }
            $roless = $user_data1->roles;
            if (count($roless) > 0) {
                // print_r($user_metadata);
                if (in_array('operator', $roless)) {
                    $userdata = array(
                        "id" => $id,
                        "first_name" => $user_metadata->first_name[0], //['first_name'][0],
                        'last_name' => $user_metadata->last_name[0], //['last_name'][0], 
                        'email' => property_exists($user_metadata, 'email') ? $user_metadata->email[0] : '', //['email'][0], 
                        'user_phone' => property_exists($user_metadata, 'user_phone') ? $user_metadata->user_phone[0] : '', //['user_phone'][0], 
                        'nToken' => property_exists($user_metadata, 'nToken') ? $user_metadata->nToken[0] : '', //['nToken'][0], 
                        'location' => property_exists($user_metadata, 'location') ? $user_metadata->location[0] : '', //['location'][0],
                        'profile_image' => $user_metadata->profile_image[0], //['profile_image'][0], 
                        'machine' => [
                            'title' => $producttitle,
                            'id' => $machineassoc,
                            'equipment_number' => $equipment_number,
                            'equipment_serial_number' => $equipment_serial_number
                        ],
                        'order' => $customerdata
                    );
                    if (isset($customerdata['order_id'])) {
                        $table_names =  'wp_service_request';
                        global $wpdb;
                        $order_id = $customerdata['order_id'];
                        $queryInInsp = "SELECT `id`,`status`,`order_id` FROM $table_names where operator_id='$id' and stype=1 and order_id='$order_id' ORDER BY created_on desc LIMIT 1";
                        $resultInInsp = $wpdb->get_results($queryInInsp, ARRAY_A);
                        if ($wpdb->last_error) {
                            return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
                        }
                        // $getInspectionAdded = $result;
                        if ($resultInInsp) {
                            if (count($resultInInsp) > 0) {
                                $customerdata['initInspect']  = $resultInInsp[0];
                                $userdata['order'] = $customerdata;
                            }
                        }
                    }

                    $encrypted = encryptdaata(array('message' => 'Operator Login successful ', 'userDetails' => $userdata));
                    return new WP_REST_Response($encrypted, 200);
                }
            }
            $data_update = array('appId' => $appId, 'count' => 'count+1', 'username' => $username);
            $data_where = array('device_id' => $device_id);
            $wpdb->update($table_invalidlogin, $data_update, $data_where);

            return new WP_REST_Response(array('message' => 'You are not an operator of Gmmco',  'reason' => $wpdb->last_error), 400);
        } else {
            $wpdb->query("UPDATE $table_invalidlogin SET appId=$appId, username='$username', count=count+1 WHERE device_id='$device_id'");

            return new WP_REST_Response(array('message' => 'Invalid login credentials.'), 400);
        }
    } else {

        $wpdb->query("UPDATE $table_invalidlogin SET appId=$appId, username='$username', count=count+1 WHERE device_id='$device_id'");

        return new WP_REST_Response(array('message' => "Invalid login credentials.." . $wpdb->last_error), 400);
    }
}

// function getAssignedDataf($request)
// {
//     $parametresen = $request->get_body_params();
//     $parameters =  decryptdaata($parametresen['params']);
//     $id = $parameters['id'];
//     $customerdata = [];
//     $customerid = 0;
//     $machineassoc = get_user_meta((int)$id, 'machine_associated', true);
//     $user = get_user_by('ID', $id); // get_user_meta((int)$id, 'email', true);
//     $email = $user->user_email;

//     $phone = get_user_meta((int)$id, 'user_phone', true);
//     $profileimage = get_user_meta((int)$id, 'profile_image', true);
//     $location = get_user_meta((int)$id, 'work_location', true);
//     $contractId = get_user_meta((int)$id, 'contract_id', true);

//     $product = get_post($machineassoc);
//     $producttitle = $product->post_title;
//     $equipment_number = get_post_meta($machineassoc, 'equipment_number', true);
//     $equipment_serial_number = get_post_meta($machineassoc, 'equipment_serial_number', true);

//     $imagepath = get_the_post_thumbnail_url($product->ID);
//     if (strlen(trim($contractId)) > 0) {
//         global $woocommerce;
//         $order = wc_get_order($contractId);
//         if ($order) {
//             $stdt = $order->get_meta('start_date', true);
//             $enddt = $order->get_meta('end_date', true);
//             $isdateList = explode("-", $stdt);
//             if (is_array($isdateList)) {
//                 if (strlen($isdateList[0]) == 2) {
//                     $stdt = implode('-', array_reverse(explode('-', $stdt)));
//                     $enddt = implode('-', array_reverse(explode('-', $enddt)));
//                 }
//             }
//             $customerdata['start_date'] = $stdt; // wc_get_order_item_meta($contractId, 'start_date',true);
//             $customerdata['end_date'] = $enddt; //wc_get_order_item_meta($contractId, 'end_date',true);
//             $customerdata['order_status'] =  $order->get_status();
//             $customerdata['order_id'] = $contractId;

//             $oitems =  $order->get_items(); // woocommerce_get_product_from_item();
//             foreach ($oitems as $key => $oitem) {

//                 $orderItemData =  $order->get_item($key);
//                 // die(json_encode($orderItemData));
//                 if ($orderItemData) {
//                     $machineassoc = $orderItemData['product_id'];
//                     // $equipment_number = $orderItemData['equipment_number'];
//                     $equipment_number = get_post_meta($machineassoc, 'equipment_number', true);
//                     $equipment_serial_number = get_post_meta($machineassoc, 'equipment_serial_number', true);
//                     $producttitle = $orderItemData['name'];
//                     $imagepath = get_the_post_thumbnail_url($machineassoc);
//                     // $orderItemData
//                 }
//             }
//             $customerdata['machine_data'] = $order->get_item;
//             $customerid = $order->get_customer_id();
//             $customerdata['company'] =  get_user_meta($customerid, 'billing_company', true);
//             $customerdata['first_name'] = $order->get_billing_first_name(); // get_user_meta((int)$customerid, 'first_name', true);
//             $customerdata['last_name'] = $order->get_billing_last_name(); // get_user_meta((int)$customerid, 'last_name', true);
//             // $customerdata['company'] = $order->get_billing_company(); //

//             $customerdata['billing_address_1'] =  $order->get_billing_address_1();
//             $customerdata['billing_address_2'] = $order->get_billing_address_2(); // get_user_meta((int)$customerid, 'billing_address_2', true);
//             $customerdata['billing_city'] = $order->get_billing_city(); // get_user_meta((int)$customerid, 'billing_city', true);
//             $customerdata['billing_email'] = $order->get_billing_email(); //get_user_meta((int)$customerid, 'billing_email', true);
//             $customerdata['phone'] = $order->get_billing_phone(); // get_user_meta((int)$customerid, 'billing_phone', true);
//             $customerdata['postcode'] = $order->get_billing_postcode(); // get_user_meta((int)$customerid, 'billing_address_1', true);
//             $customerdata['state'] = $order->get_billing_state();
//         }

//         if (isset($customerdata['order_id'])) {
//             $table_names =  'wp_service_request';
//             global $wpdb;
//             $order_id = $customerdata['order_id'];
//             $queryInInsp = "SELECT `id`,`status`,`order_id` FROM $table_names where operator_id='$id' and stype=1 and order_id='$order_id' ORDER BY created_on desc LIMIT 1";
//             $resultInInsp = $wpdb->get_results($queryInInsp, ARRAY_A);
//             if ($wpdb->last_error) {

//                 return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
//             }
//             // $getInspectionAdded = $result;
//             if ($resultInInsp) {
//                 if (count($resultInInsp) > 0) {
//                     $customerdata['initInspect']  = $resultInInsp[0];
//                 }
//             }
//         }
//     }
//     // echo $product->post_title;
//     $arrayd = array(
//         'data' => ['phone' => $phone, 'email' => $email, 'address' => '', 'image' => $profileimage, 'customer_id' => $customerid, 'work_location' => $location],
//         'product' => ['id' => $machineassoc, 'title' => $producttitle, 'image' => $imagepath, 'equipment_number' => $equipment_number, 'equipment_serial_number' => $equipment_serial_number],

//     );
//     if (count($customerdata) > 0) {
//         $arrayd['customer'] = $customerdata;
//     }
//     $encrypted = encryptdaata($arrayd);
//     return new WP_REST_Response($encrypted, 200);
// }

function getAssignedDataf($request)
{
    global $wpdb, $woocommerce;

    $parameters = $request->get_json_params()['params'] ?? [];
    $id = isset($parameters['id']) ? intval($parameters['id']) : 0;

    if (!$id) {
        return new WP_REST_Response(['error' => 'Missing or invalid ID'], 400);
    }

    $user = get_user_by('ID', $id);
    if (!$user) {
        return new WP_REST_Response(['error' => 'User not found', 'id_received' => $id], 404);
    }

    // Get assignment row ID
    $assign_table = 'wp_assign_operators_contracts';
    $query = "SELECT id FROM $assign_table WHERE operator_id = %d ORDER BY created_on DESC LIMIT 1";
    $assigned = $wpdb->get_row($wpdb->prepare($query, $id), ARRAY_A);
    $assigned_row_id = $assigned['id'] ?? null;

    // User meta
    $email = $user->user_email ?? null;
    $phone = get_user_meta($id, 'user_phone', true);
    $profileimage = get_user_meta($id, 'profile_image', true);
    $location = get_user_meta($id, 'work_location', true);
    $contractId = get_user_meta($id, 'contract_id', true);
    $machineassoc = get_user_meta($id, 'machine_associated', true);

    // Product info
    $product = get_post($machineassoc);
    $producttitle = $product ? $product->post_title : null;
    $equipment_number = $product ? get_post_meta($machineassoc, 'equipment_number', true) : null;
    $equipment_serial_number = $product ? get_post_meta($machineassoc, 'equipment_serial_number', true) : null;
    $imagepath = $product ? get_the_post_thumbnail_url($product->ID) : null;

    $productData = [];
    $customerdata = [];
    $customerid = 0;

    if (!empty($machineassoc)) {
        if (!empty($machineassoc)) $productData['id'] = $machineassoc;
        if (!empty($producttitle)) $productData['title'] = $producttitle;
        if (!empty($imagepath)) $productData['image'] = $imagepath;
        if (!empty($equipment_number)) $productData['equipment_number'] = $equipment_number;
        if (!empty($equipment_serial_number)) $productData['equipment_serial_number'] = $equipment_serial_number;
        if (!empty($assigned_row_id)) $productData['assigned_id'] = $assigned_row_id;

        if (!empty($contractId)) {
            $order = wc_get_order($contractId);
            if ($order) {
                $stdt = $order->get_meta('start_date', true);
                $enddt = $order->get_meta('end_date', true);

                $isdateList = explode("-", $stdt);
                if (is_array($isdateList) && strlen($isdateList[0]) == 2) {
                    $stdt = implode('-', array_reverse($isdateList));
                    $enddt = implode('-', array_reverse(explode("-", $enddt)));
                }

                if (!empty($stdt)) $customerdata['start_date'] = $stdt;
                if (!empty($enddt)) $customerdata['end_date'] = $enddt;
                if (!empty($order->get_status())) $customerdata['order_status'] = $order->get_status();
                $customerdata['order_id'] = $contractId;

                foreach ($order->get_items() as $key => $oitem) {
                    $orderItemData = $order->get_item($key);
                    if ($orderItemData) {
                        $machineassoc = $orderItemData['product_id'];
                        $equipment_number = get_post_meta($machineassoc, 'equipment_number', true);
                        $equipment_serial_number = get_post_meta($machineassoc, 'equipment_serial_number', true);
                        $producttitle = $orderItemData['name'];
                        $imagepath = get_the_post_thumbnail_url($machineassoc);
                    }
                }

                $customerid = $order->get_customer_id();

                $orderMetaMap = [
                    'company' => get_user_meta($customerid, 'billing_company', true),
                    'first_name' => $order->get_billing_first_name(),
                    'last_name' => $order->get_billing_last_name(),
                    'billing_address_1' => $order->get_billing_address_1(),
                    'billing_address_2' => $order->get_billing_address_2(),
                    'billing_city' => $order->get_billing_city(),
                    'billing_email' => $order->get_billing_email(),
                    'phone' => $order->get_billing_phone(),
                    'postcode' => $order->get_billing_postcode(),
                    'state' => $order->get_billing_state()
                ];

                foreach ($orderMetaMap as $key => $value) {
                    if (!empty($value)) {
                        $customerdata[$key] = $value;
                    }
                }

                // Inspection status
                $table_name = 'wp_service_request';
                $queryInInsp = "SELECT id, status, order_id 
                                FROM $table_name 
                                WHERE operator_id='$id' AND stype=1 AND order_id='$contractId'
                                ORDER BY created_on DESC LIMIT 1";
                $resultInInsp = $wpdb->get_results($queryInInsp, ARRAY_A);

                if ($wpdb->last_error) {
                    return new WP_REST_Response(['message' => 'Unable to fetch inspection data', 'reason' => $wpdb->last_error], 500);
                }

                if (!empty($resultInInsp)) {
                    $customerdata['initInspect'] = $resultInInsp[0];
                }
            }
        }
    }

    // Build data section
    $userData = [];
    if (!empty($phone)) $userData['phone'] = $phone;
    if (!empty($email)) $userData['email'] = $email;
    $userData['address'] = ''; // always static
    if (!empty($profileimage)) $userData['image'] = $profileimage;
    if (!empty($customerid)) $userData['customer_id'] = $customerid;
    if (!empty($location)) $userData['work_location'] = $location;

    // Final response
    $arrayd = ['data' => $userData];

    // Only include product and customer if product ID is present and not 0
    if (!empty($productData['id'])) {
        $arrayd['product'] = $productData;
        if (!empty($customerdata)) {
            $arrayd['customer'] = $customerdata;
        }
    }

    return new WP_REST_Response($arrayd, 200);
}



/**Get log sheet of operator */
// function getlogsheetf($request = null)
// {
//     $parametresen = json_decode($request->get_body(), true); // <-- safest way
//    $paramData = $parametresen['params'] ?? [];

//     if (is_array($paramData)) {
//         $parametres = $paramData;
//     } else {
//         $parametres = decryptdaata($paramData); // if you're using encryption
//     }

//     // $parametresen =  $request->get_body_params();
//     // $parametres =  decryptdaata($parametresen['params']);
//     // print_r($parametres);
//     $user_id = $parametres['user_id'];
//     $order_id = $parametres['order_id'];
//     $dates =  json_decode(($parametres['dates']));
//     //    die(($dates));
//     // print_r($dates);
//     $limits = "LIMIT 10";
//     $daterange = "";
//     if (count($dates) > 0) {
//         $fromDate = $dates[0];
//         $endDate = $dates[1];
//         if (empty($fromDate) || empty($endDate)) {
//             $limits = "LIMIT 10";
//         } else {
//             $limits = "";
//             $daterange = " AND a.log_date between '$fromDate' and '$endDate' ";
//         }
//     }
//     global $wpdb;
//     $table_name = "wp_logsheet";
//     $table_nameb = "wp_logs_attachment_docs";
//     $query = "SELECT a.*,concat('[ ',GROUP_CONCAT('{\"',b.id,'\":\"',b.attachment,'\"}'),']') docs FROM $table_name a left join $table_nameb b on a.id=b.log_id WHERE a.operator_Id='$user_id' $daterange GROUP BY a.id ORDER BY a.log_date DESC $limits ";
//     // die($query);
//     $result = $wpdb->get_results($query, ARRAY_A);
//     if ($wpdb->last_error) {
//         return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
//     }

//     $customerdata = [];
//     // if (isset($customerdata['order_id'])) {
//     $table_names =  'wp_service_request';
//     // global $wpdb;

//     $queryInInsp = "SELECT `id`,`status`,`order_id` FROM $table_names where operator_id='$user_id' and stype='1' and order_id='$order_id' ORDER BY created_on desc LIMIT 1";
//     $resultInInsp = $wpdb->get_results($queryInInsp, ARRAY_A);
//     if ($wpdb->last_error) {
//         return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
//     }
//     // $getInspectionAdded = $result;
//     if ($resultInInsp) {
//         if (count($resultInInsp) > 0) {
//             $customerdata['initInspect']  = $resultInInsp[0];
//         }
//     }
//     // }

//     $rows = [];
//     if ($result) {
//         global $host;
//         for ($i = 0; $i < count($result); $i++) {
//             $resultd = (object)$result[$i];
//             $orderid = $resultd->order_id;
//             try {
//                 // $result[$i]['COMPANY']="company selecrewd";
//                 if ($orderid > 0) {
//                     $order = wc_get_order($orderid);
//                     $companyName = $order->get_billing_company();
//                     if ($companyName == '') {
//                         $companyName = $order->get_billing_first_name();
//                     }
//                     $result[$i]['company'] = $companyName;
//                 }
//             } catch (\Throwable $th) {
//                 // $result[$i]['company']=$th->getMessage();
//             }
//         }
//         $imgUrlfolder = "$host/wp-content/uploads/operator-logs-attachments/";
//         $encrypted = encryptdaata(array('message' => '', 'logs' => $result, 'imgUrlfolder' => $imgUrlfolder) + $customerdata);
//         return new WP_REST_Response($encrypted, 200);
//     } else {
//         if ($daterange != "") {
//             $encrypted = encryptdaata(array('message' => 'No Logs available between these dates' . implode(", ", $dates), 'logs' => $rows) + $customerdata);
//         } else {
//             $encrypted = encryptdaata(array('message' => 'No logs are available yet. Please click the add button below to create your log sheet.', 'logs' => $rows) + $customerdata);
//         }
//         return new WP_REST_Response($encrypted, 200);
//     }
// }


function getlogsheetf($request = null)
{
     $parametresen = json_decode($request->get_body(), true); // <-- safest way
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }


    // $parametresen =  $request->get_body_params();
    // $parametres = decryptdaata($parametresen['params']);

    $user_id = $parametres['user_id'] ?? '';
    $order_id = $parametres['order_id'] ?? '';
    $limits = "LIMIT 10";
    $daterange = "";

    // ✅ Safe handling of 'dates' whether it's JSON string or array
    $dates = $parametres['dates'] ?? [];

    if (is_string($dates)) {
        $dates = json_decode($dates, true);
    }

    if (is_array($dates) && count($dates) === 2) {
        $fromDate = $dates[0];
        $endDate = $dates[1];

        if (!empty($fromDate) && !empty($endDate)) {
            $limits = "";
            $daterange = " AND a.log_date BETWEEN '$fromDate' AND '$endDate' ";
        }
    }

    global $wpdb;
    $table_name = "wp_logsheet";
    $table_nameb = "wp_logs_attachment_docs";

    $query = "
        SELECT 
            a.*, 
            CONCAT('[', GROUP_CONCAT('{\"', b.id, '\":\"', b.attachment, '\"}'), ']') AS docs 
        FROM $table_name a 
        LEFT JOIN $table_nameb b ON a.id = b.log_id 
        WHERE a.operator_Id = '$user_id' 
        $daterange 
        GROUP BY a.id 
        ORDER BY a.log_date DESC 
        $limits
    ";

    $result = $wpdb->get_results($query, ARRAY_A);

    if ($wpdb->last_error) {
        return new WP_REST_Response([
            'message' => 'Unable to fetch logs. Please try later',
            'reason' => $wpdb->last_error
        ], 400);
    }

    $customerdata = [];
    $table_names = 'wp_service_request';

    $queryInInsp = "
        SELECT id, status, order_id 
        FROM $table_names 
        WHERE operator_id = '$user_id' 
        AND stype = '1' 
        AND order_id = '$order_id' 
        ORDER BY created_on DESC 
        LIMIT 1
    ";
    $resultInInsp = $wpdb->get_results($queryInInsp, ARRAY_A);

    if ($wpdb->last_error) {
        return new WP_REST_Response([
            'message' => 'Unable to fetch inspection info',
            'reason' => $wpdb->last_error
        ], 400);
    }

    if (!empty($resultInInsp)) {
        $customerdata['initInspect'] = $resultInInsp[0];
    }

    $rows = [];
    if (!empty($result)) {
        global $host;

        foreach ($result as $i => $row) {
            try {
                $orderid = $row['order_id'];
                if ($orderid > 0) {
                    $order = wc_get_order($orderid);
                    $companyName = $order->get_billing_company();
                    if (empty($companyName)) {
                        $companyName = $order->get_billing_first_name();
                    }
                    $result[$i]['company'] = $companyName;
                }
            } catch (\Throwable $th) {
                // Handle WC order errors silently
                $result[$i]['company'] = '';
            }
        }

        $imgUrlfolder = "$host/wp-content/uploads/operator-logs-attachments/";
        $encrypted = encryptdaata(array_merge([
            'message' => '',
            'logs' => $result,
            'imgUrlfolder' => $imgUrlfolder
        ], $customerdata));

        return new WP_REST_Response($encrypted, 200);
    } else {
        $message = $daterange !== ""
            ? 'No Logs available between these dates: ' . implode(", ", $dates)
            : 'No logs are available yet. Please click the add button below to create your log sheet.';

        $encrypted = encryptdaata(array_merge([
            'message' => $message,
            'logs' => $rows
        ], $customerdata));

        return new WP_REST_Response($encrypted, 200);
    }
}


/**Operator add logs */
// function saveLogsf($request)
// {
//    $parametresen = json_decode($request->get_body(), true); // <-- safest way
//    $paramData = $parametresen['params'] ?? [];

//     if (is_array($paramData)) {
//         $parametres = $paramData;
//     } else {
//         $parametres = decryptdaata($paramData); // if you're using encryption
//     }
//     // $parametresen = $request->get_body_params();
//     // $parameters =  decryptdaata($parametresen['params']);
//     $paramdata =  $parametres; //['data'];
//     global $wpdb;
//     $inRow = '';
//     $id = '0';
//     $imagesl = [];
//     $upload_dir = wp_upload_dir();
//     $upload_path = $upload_dir['basedir'] . "/operator-logs-attachments/";
//     // Ensure the uploads directory exists
//     if (!is_dir($upload_path)) {
//         wp_mkdir_p($upload_path);
//     }
//     $attachmenntTable =  "wp_logs_attachment_docs";
//     $imagenotsaved = [];
//     $resp = '';

//     // foreach ($paramdata as $key => $value) {
//     $id = $paramdata['id'];
//     $equipmentid = $paramdata['equipmentId'] ?? 0;
//     $attend = $paramdata['attend'];
//     $date = $paramdata['date'];
//     $shift = $paramdata['shift'];
//     $startTime = $paramdata['startTime'];
//     $endTime = $paramdata['endTime'];
//     $startSMU = $paramdata['startSMU'];
//     $endSMU = $paramdata['endSMU'];
//     $fuel = $paramdata['fuel'];
//     $workingHour = $paramdata['workingHour'] ?? 0;
//     $downHour = $paramdata['downHour'] ?? 0;
//     $orderId = $paramdata['order_id'] ?? 0;
//     $logsheetTable = 'wp_logsheet';
//     // die("customer Id $logsheetTable");
//     $order = wc_get_order($orderId);
//     $customerId = $order->get_customer_id();

//     // die("customer Id $customerId");
//     // $customerId =  $order->;
//     $numShifts =  wc_get_order_item_meta($orderId, 'number_shifts_required', true);
//     $contractId = get_user_meta((int)$id, 'contract_id', true);

//     if ($attend == 0) {
//         $workingHour = 0;
//         $downHour = 0;
//         $fuel = 0;
//         $startTime = '';
//         $endTime = '';
//     }
//     if ($contractId != $orderId) {
//         return new WP_REST_Response(array('message' => 'Contract details mismatched. Please go to the MyAccount page to verify contract/customer details and then try again.', 'success' => 0), 400);
//     }
//     $today = date('Y-m-d');
//     if ($date > $today) {
//         return new WP_REST_Response(array('message' => "Can't save future logs.", 'success' => 0), 400);
//     }
//     $getPreviousQuery = "SELECT end_smu FROM $logsheetTable where equipment_id=$equipmentid AND log_date>'now() - INTERVAL 3 MONTH' AND  log_date <= '$today' and attend=1 ORDER BY log_date DESC limit 1";
//     $getPreviousresult = $wpdb->get_results($getPreviousQuery);
//     if ($getPreviousresult) {
//         $smuendval = $getPreviousresult->end_smu;
//         // if ($attend == 1) {
//         if ($startSMU < $smuendval) {
//             return new WP_REST_Response(array('message' => "Invalid SMU value. It should be grater than previous end SMU value(Previous SMU value is $smuendval)", 'success' => 0), 400);
//         }
//         // }
//     }
//     $getPreviousQuery1 = "SELECT * FROM $logsheetTable where equipment_id=$equipmentid AND shif='$shift' AND  log_date = '$date' ";
//     $getPreviousresult1 = $wpdb->get_results($getPreviousQuery1);
//     if ($getPreviousresult1) {
//         return new WP_REST_Response(array('message' => "Unable to save this log. A log already exists for this date and shift.", 'success' => 0), 400);
//     }
//     // if($date < $getPreviousresult->log_date && $numShifts == 1){
//     //     return new WP_REST_Response(array('message' => "You can add logs. that already logs are saved previous days", 'success' => 0), 400);
//     // }
//     $datenow = date('Y-m-d H:i:s');
//     $inRow = "( '$equipmentid', '$id', '$date',  '$startTime', '$endTime', '$shift','$workingHour',0, round(TIME_TO_SEC('$downHour')/60, 0), '$fuel', '0', '', '$customerId','$startSMU','$endSMU','$attend', '$datenow','$orderId')";
//     $query = "INSERT INTO $logsheetTable (`equipment_id`, `operator_id`, `log_date`, `start_time`, `end_time`, `shift`, `working_hour`, `down_hour`,`breakdown` , `fuel`, `log_status`, `log_remarks`, `remarks_by`,`start_smu`,`end_smu`,`attend`,`log_created_on`,`order_id`)  VALUES $inRow ;";
//     $sql = $wpdb->query($query);
//     if ($wpdb->last_error) {
//         return new WP_REST_Response(array('message' => 'Unable to save data', 'reason' => "Error in insert data:  $wpdb->last_error ", 'date' => $date, 'success' => 0), 400);
//     }
//     $sqlid = $wpdb->insert_id;
//     $attachmenntTable =  "wp_logs_attachment_docs";
//     $imagenotsaved = [];
//     // $paramdata['images']
    
//     if (key_exists('images', $_FILES)) {
//         $total = count($_FILES['images']['name']);
//         for ($i = 0; $i < $total; $i++) {
//             $file_name = $_FILES['images']['name'][$i];
//             $file_tmp_name = $_FILES['images']['tmp_name'][$i];
//             $file_path = $upload_path . basename($file_name);
//             if (move_uploaded_file($file_tmp_name, $file_path)) {
//                 $wpdb->insert($attachmenntTable, [
//                     "log_id" => $sqlid,
//                     "attachment" => $file_name,
//                     "created_on" => date('Y-m-d H:i:s'),
//                 ]);
//             } else {
//                 $imagenotsaved[] = ['id' => $sqlid, 'date' => $date];
//             }
//         }
//     }

//     $newtimestamp = strtotime("$datenow - 1 minute");
//     $timeinteralval =  date('Y-m-d H:i:s', $newtimestamp);
//     $dupQuery = "SELECT * from $logsheetTable where log_date='$date' and start_time='$startTime' and operator_id='$id' and order_id='$orderId' and log_created_on>'$timeinteralval'";
//     $resultdup = $wpdb->get_results($dupQuery, ARRAY_A);
//     if ($resultdup) {
//         if (is_array($resultdup)) {
//             if (count($resultdup) > 1) {
//                 // $wpdb->delete( $logsheetTable, array( 'id' => $sqlid) );
//                 // global $filename;
//                 // file_put_contents($filename, date('y-m-d H:i:s') . " logfordel : $logsheetTable where id=$sqlid  \n", FILE_APPEND);
//             }
//         }
//     }

//     $encrypted = encryptdaata(array('message' => 'Data saved.', 'imagenotsaved' => $imagenotsaved, 'success' => 1, 'id' => $sqlid));
//     return new WP_REST_Response($encrypted);
// }




// -------------------------------------------------------------------------------------- START TP EDIT

function saveLogsf($request){
    
   $parametresen = json_decode($request->get_body(), true); // <-- safest way
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }
    // $parametresen = $request->get_body_params();
    // $parameters =  decryptdaata($parametresen['params']);
    $paramdata =  $parametres; //['data'];
    global $wpdb;
    $inRow = '';
    $id = '0';
    $imagesl = [];
    $upload_dir = wp_upload_dir();
    $upload_path = $upload_dir['basedir'] . "/operator-logs-attachments/";
    // Ensure the uploads directory exists
    if (!is_dir($upload_path)) {
        wp_mkdir_p($upload_path);
    }
    $attachmenntTable =  "wp_logs_attachment_docs";
    $imagenotsaved = [];
    $resp = '';

    // foreach ($paramdata as $key => $value) {
    $id = $paramdata['id'];
    $equipmentid = $paramdata['equipmentId'] ?? 0;
    $attend = $paramdata['attend'];
    $date = $paramdata['date'];
    $shift = $paramdata['shift'];
    $startTime = $paramdata['startTime'];
    $endTime = $paramdata['endTime'];
    $startSMU = $paramdata['startSMU'];
    $endSMU = $paramdata['endSMU'];
    $fuel = $paramdata['fuel'];
    $workingHour = $paramdata['workingHour'] ?? 0;
    $downHour = $paramdata['downHour'] ?? 0;
    $orderId = $paramdata['order_id'] ?? 0;
    $logsheetTable = 'wp_logsheet';
    // die("customer Id $logsheetTable");
    $order = wc_get_order($orderId);
    $customerId = $order->get_customer_id();
    $image_ids = $paramdata['image_ids'] ?? '';


    // die("customer Id $customerId");
    // $customerId =  $order->;
    $numShifts =  wc_get_order_item_meta($orderId, 'number_shifts_required', true);
    $contractId = get_user_meta((int)$id, 'contract_id', true);

    if ($attend == 0) {
        $workingHour = 0;
        $downHour = 0;
        $fuel = 0;
//         $startTime = '';
//         $endTime = '';
    }
    if ($contractId != $orderId) {
        return new WP_REST_Response(array('message' => 'Contract details mismatched. Please go to the MyAccount page to verify contract/customer details and then try again.', 'success' => 0), 400);
    }
    $today = date('Y-m-d');
    if ($date > $today) {
        return new WP_REST_Response(array('message' => "Can't save future logs.", 'success' => 0), 400);
    }
    $getPreviousQuery = "SELECT end_smu FROM $logsheetTable where equipment_id=$equipmentid AND log_date>'now() - INTERVAL 3 MONTH' AND  log_date <= '$today' and attend=1 ORDER BY log_date DESC limit 1";
    $getPreviousresult = $wpdb->get_results($getPreviousQuery);
    if ($getPreviousresult) {
        $smuendval = $getPreviousresult->end_smu;
        // if ($attend == 1) {
        if ($startSMU < $smuendval) {
            return new WP_REST_Response(array('message' => "Invalid SMU value. It should be grater than previous end SMU value(Previous SMU value is $smuendval)", 'success' => 0), 400);
        }
        // }
    }
    $getPreviousQuery1 = "SELECT * FROM $logsheetTable where equipment_id=$equipmentid AND shif='$shift' AND  log_date = '$date' ";
    $getPreviousresult1 = $wpdb->get_results($getPreviousQuery1);
    if ($getPreviousresult1) {
        return new WP_REST_Response(array('message' => "Unable to save this log. A log already exists for this date and shift.", 'success' => 0), 400);
    }
    // if($date < $getPreviousresult->log_date && $numShifts == 1){
    //     return new WP_REST_Response(array('message' => "You can add logs. that already logs are saved previous days", 'success' => 0), 400);
    // }
    $datenow = date('Y-m-d H:i:s');
    $inRow = "( '$equipmentid', '$id', '$date',  '$startTime', '$endTime', '$shift','$workingHour',0, round(TIME_TO_SEC('$downHour')/60, 0), '$fuel', '0', '', '$customerId','$startSMU','$endSMU','$attend', '$datenow','$orderId', '$image_ids')";


    $query = "INSERT INTO $logsheetTable (`equipment_id`, `operator_id`, `log_date`, `start_time`, `end_time`, `shift`, `working_hour`, `down_hour`,`breakdown` , `fuel`, `log_status`, `log_remarks`, `remarks_by`,`start_smu`,`end_smu`,`attend`,`log_created_on`,`order_id`, `images`)  VALUES $inRow ;";

    $sql = $wpdb->query($query);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to save data', 'reason' => "Error in insert data:  $wpdb->last_error ", 'date' => $date, 'success' => 0), 400);
    }
    $sqlid = $wpdb->insert_id;
    $attachmenntTable =  "wp_logs_attachment_docs";
    $imagenotsaved = [];
    // $paramdata['images']
    
    if (key_exists('images', $_FILES)) {
        $total = count($_FILES['images']['name']);
        for ($i = 0; $i < $total; $i++) {
            $file_name = $_FILES['images']['name'][$i];
            $file_tmp_name = $_FILES['images']['tmp_name'][$i];
            $file_path = $upload_path . basename($file_name);
            if (move_uploaded_file($file_tmp_name, $file_path)) {
                $wpdb->insert($attachmenntTable, [
                    "log_id" => $sqlid,
                    "attachment" => $file_name,
                    "created_on" => date('Y-m-d H:i:s'),
                ]);
            } else {
                $imagenotsaved[] = ['id' => $sqlid, 'date' => $date];
            }
        }
    }

    $newtimestamp = strtotime("$datenow - 1 minute");
    $timeinteralval =  date('Y-m-d H:i:s', $newtimestamp);
    $dupQuery = "SELECT * from $logsheetTable where log_date='$date' and start_time='$startTime' and operator_id='$id' and order_id='$orderId' and log_created_on>'$timeinteralval'";
    $resultdup = $wpdb->get_results($dupQuery, ARRAY_A);
    if ($resultdup) {
        if (is_array($resultdup)) {
            if (count($resultdup) > 1) {
                // $wpdb->delete( $logsheetTable, array( 'id' => $sqlid) );
                // global $filename;
                // file_put_contents($filename, date('y-m-d H:i:s') . " logfordel : $logsheetTable where id=$sqlid  \n", FILE_APPEND);
            }
        }
    }

    $encrypted = encryptdaata(array('message' => 'Data saved.', 'imagenotsaved' => $imagenotsaved, 'success' => 1, 'id' => $sqlid));
    return new WP_REST_Response($encrypted);
}


// curl --location 'https://gmmco-rms.teampumpkin.in/wp-json/api/operator/saveLogs' \
// --header 'Content-Type: application/json' \
// --data '{
//   "params": {
//     "id": "1352",
//     "equipmentId": "10363",
//     "attend": 1,
//     "date": "2025-06-25",
//     "shift": "1",
//     "startTime": "09:00",
//     "endTime": "17:00",
//     "startSMU": 110,
//     "endSMU": 118,
//     "fuel": 10,
//     "workingHour": "8",
//     "downHour": "0:00",
//     "order_id": "10534",
//     "image_ids": "101, 102, 103"
//   }
// }'

// ALTER TABLE wp_logsheet ADD COLUMN images TEXT;


/**Get Service request */
function getServiceRequestf($request = null)
{
    $parametresen = json_decode($request->get_body(), true); // <-- safest way
    $paramData = $parametresen['params'] ?? [];

    $sqlParams = [];
    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }
    // $parametresen =  $request->get_body_params();
    // $parametres =  decryptdaata($parametresen['params']);
    $user_id = $parametres['user_id'];

    
    // $dates =  json_decode($parametres['dates']);
    $dates = $parametres['dates'];

    $stype =  $parametres['stype'];
    $orderid = $parametres['order_id'] ?? '';
    $limits = "LIMIT 10";
    $daterange = "";
    if (count($dates) == 2) {
        $fromDate = $dates[0];
        $endDate = $dates[1];
        if (empty($fromDate) || empty($endDate)) {
            $limits = "LIMIT 10";
        } else {
            $limits = "";
            $daterange = " AND date(a.created_on) between '$fromDate' and '$endDate' ";
        }
    }
    $whereOrderId = '';
    if (!empty($orderid)) {
        $whereOrderId = " AND order_id=$orderid ";
    }
    $whereEquipmentId = '';
    if( isset($parametres['equipment_id'])){
      $whereEquipmentId = ' AND equipment_id = %d ';
      $sqlParams[] = $parametres['equipment_id'];
    }
    global $wpdb;
    $table_name = $wpdb->prefix . 'service_request';
    $table_nameb = $wpdb->prefix . 'service_attachment_docs';

    $querysrerv = "SELECT a.*,concat('[',GROUP_CONCAT('{\"',b.id,'\":\"',b.attachment,'\"}'),']') docs FROM $table_name a left join $table_nameb b on a.id=b.log_id WHERE a.stype IN ($stype) AND a.operator_Id='$user_id' $whereOrderId $whereEquipmentId $daterange GROUP BY a.id ORDER BY a.created_on DESC $limits ";
    // die($querysrerv);
    // $query = "SELECT * FROM $table_name where operator_Id='$user_id' ORDER BY created_on DESC LIMIT 10 ";
    // $result1 = $wpdb->get_results("SELECT * FROM $table_name WHERE stype=1 and "); 
    $result = $wpdb->get_results( $wpdb->prepare($querysrerv, $sqlParams ), ARRAY_A);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
    }

    if ($result) {
        for ($i = 0; $i < count($result); $i++) {
            // foreach ($result as $key => $value) {
            $value = (object)$result[$i];
            $productid = (int) $value->equipment_id;
            $product = get_post($productid);
            $producttitle = $product->post_title;
            if ($stype == 1) {
                $oprId = intval($value->operator_id);
                $oprNamef = get_user_meta($oprId, 'first_name', true);
                $oprNamel = get_user_meta($oprId, 'last_name', true);
                $result[$i]['oprName'] = $oprNamef . " " . $oprNamel;
                $result[$i]['problem_description'] = $value->ins_remarks;
            }
            $result[$i]['product']  = $producttitle;

            $orderid = $value->order_id;
            try {
                // $result[$i]['COMPANY']="company selecrewd";
                if ($orderid > 0) {
                    $order = wc_get_order($orderid);
                    $compName =  $order->get_billing_company();
                    if (empty(trim($compName))) {
                        $compName =  $order->get_billing_first_name() . " " . $order->get_billing_last_name();
                    }
                    $result[$i]['company'] =  $compName;
                }
            } catch (\Throwable $th) {
                // $result[$i]['company']=$th->getMessage();
            }
        }
        global $host;

        $imgUrlfolder = "$host/wp-content/uploads/operator-service-request-attachments/";
        $encrypeddata = encryptdaata(array('message' => '', 'serviceRequests' => $result, "imgUrlfolder" => $imgUrlfolder));
        return new WP_REST_Response($encrypeddata, 200);
    } else {

        if ($daterange != "") {
            $message = "";
            if ($stype == 0) {
                $message = 'No service requests between these days' . implode(", ", $dates);
            } else if ($stype == 1) {
                $message = 'No inspection data between these days' . implode(", ", $dates);
            }

            $encrypeddata = encryptdaata(array('message' => $message, 'serviceRequests' => $result));
        } else {
            $message = "";
            if ($stype == 0) {
                $message = 'You have not made any service requests yet. If you would like to add a service request, please click the add button below.';
            } else if ($stype == 1) {
                $message = 'No inspection data uploaded yet. If you would like to upload inspection images, please click the add button below.';
            }
            $encrypeddata = encryptdaata(array('message' => $message, 'serviceRequests' => $result));
        }
        return new WP_REST_Response($encrypeddata, 200);
    }
}



// function getServiceRequestf($request = null)
// {
//     $parametresen = json_decode($request->get_body(), true); // <-- safest way
//     $paramData = $parametresen['params'] ?? [];

//     $sqlParams = [];
//     if (is_array($paramData)) {
//         $parametres = $paramData;
//     } else {
//         $parametres = decryptdaata($paramData); // if you're using encryption
//     }
//     // $parametresen =  $request->get_body_params();
//     // $parametres =  decryptdaata($parametresen['params']);
//     $user_id = $parametres['user_id'];
//     // $dates =  json_decode($parametres['dates']);
//     $dates = $parametres['dates'];

//     $stype =  $parametres['stype'];
//     $orderid = $parametres['order_id'] ?? '';
//     $limits = "LIMIT 10";
//     $daterange = "";
//     if (count($dates) == 2) {
//         $fromDate = $dates[0];
//         $endDate = $dates[1];
//         if (empty($fromDate) || empty($endDate)) {
//             $limits = "LIMIT 10";
//         } else {
//             $limits = "";
//             $daterange = " AND date(a.created_on) between '$fromDate' and '$endDate' ";
//         }
//     }
//     $whereOrderId = '';
//     if (!empty($orderid)) {
//         $whereOrderId = " AND order_id=$orderid ";
//     }
//     $whereEquipmentId = '';
//     if( isset($parametres['equipment_id'])){
//       $whereEquipmentId = ' AND equipment_id = %d ';
//       $sqlParams[] = $parametres['equipment_id'];
//     }
//     global $wpdb;
//     $table_name = $wpdb->prefix . 'service_request';
//     $table_nameb = $wpdb->prefix . 'service_attachment_docs';

//     $querysrerv = "SELECT a.*,concat('[',GROUP_CONCAT('{\"',b.id,'\":\"',b.attachment,'\"}'),']') docs FROM $table_name a left join $table_nameb b on a.id=b.log_id WHERE a.stype IN ($stype) AND a.operator_Id='$user_id' $whereOrderId $whereEquipmentId $daterange GROUP BY a.id ORDER BY a.created_on DESC $limits ";
//     // die($querysrerv);
//     // $query = "SELECT * FROM $table_name where operator_Id='$user_id' ORDER BY created_on DESC LIMIT 10 ";
//     // $result1 = $wpdb->get_results("SELECT * FROM $table_name WHERE stype=1 and ");
//     $result = $wpdb->get_results( $wpdb->prepare($querysrerv, $sqlParams ), ARRAY_A);
//     if ($wpdb->last_error) {
//         return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
//     }

//     if ($result) {
//         for ($i = 0; $i < count($result); $i++) {
//             // foreach ($result as $key => $value) {
//             $value = (object)$result[$i];
//             $productid = (int) $value->equipment_id;
//             $product = get_post($productid);
//             $producttitle = $product->post_title;
//             if ($stype == 1) {
//                 $oprId = intval($value->operator_id);
//                 $oprNamef = get_user_meta($oprId, 'first_name', true);
//                 $oprNamel = get_user_meta($oprId, 'last_name', true);
//                 $result[$i]['oprName'] = $oprNamef . " " . $oprNamel;
//                 $result[$i]['problem_description'] = $value->ins_remarks;
//             }
//             $result[$i]['product']  = $producttitle;

//             $orderid = $value->order_id;
//             try {
//                 // $result[$i]['COMPANY']="company selecrewd";
//                 if ($orderid > 0) {
//                     $order = wc_get_order($orderid);
//                     $compName =  $order->get_billing_company();
//                     if (empty(trim($compName))) {
//                         $compName =  $order->get_billing_first_name() . " " . $order->get_billing_last_name();
//                     }
//                     $result[$i]['company'] =  $compName;
//                 }
//             } catch (\Throwable $th) {
//                 // $result[$i]['company']=$th->getMessage();
//             }
//         }
//         global $host;

//         $imgUrlfolder = "$host/wp-content/uploads/operator-service-request-attachments/";
//         $encrypeddata = encryptdaata(array('message' => '', 'serviceRequests' => $result, "imgUrlfolder" => $imgUrlfolder));
//         return new WP_REST_Response($encrypeddata, 200);
//     } else {

//         if ($daterange != "") {
//             $message = "";
//             if ($stype == 0) {
//                 $message = 'No service requests between these days' . implode(", ", $dates);
//             } else if ($stype == 1) {
//                 $message = 'No inspection data between these days' . implode(", ", $dates);
//             }

//             $encrypeddata = encryptdaata(array('message' => $message, 'serviceRequests' => $result));
//         } else {
//             $message = "";
//             if ($stype == 0) {
//                 $message = 'You have not made any service requests yet. If you would like to add a service request, please click the add button below.';
//             } else if ($stype == 1) {
//                 $message = 'No inspection data uploaded yet. If you would like to upload inspection images, please click the add button below.';
//             }
//             $encrypeddata = encryptdaata(array('message' => $message, 'serviceRequests' => $result));
//         }
//         return new WP_REST_Response($encrypeddata, 200);
//     }
// }

function saveServiceRequestf($request)
{
    $parametresen = json_decode($request->get_body(), true);
    $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parameters = $paramData;
    } else {
        $parameters = decryptdaata($paramData);
    }

    $id = $parameters['id'];
    $equipmentid = $parameters['equipmentId'] ?? 0;
    $priority = $parameters['priority'];
    $date = $parameters['date']; // submitted date
    $issuedesc = addslashes($parameters['issuedesc']);
    $images = addslashes($parameters['images'] ?? '');
    $orderId = $parameters['order_id'] ?? 0;
    $stype = $parameters['stype'];

    // New field
    $assignedId = $parameters['assigned_id'] ?? 0;
    $reportedDate = addslashes($date); // reused as reported_date in DB

    if (!isset($parameters['stype'])) {
        return new WP_REST_Response(['message' => 'Invalid request, try with updated application.', 'success' => 0], 400);
    }

    global $wpdb;
    $tablename = $wpdb->prefix . 'service_request';

    // Status and description logic
    $st = 'Raised';
    $issuedesc1 = '';
    if ($stype == 1 || $stype == 2) {
        $st = 'Image uploaded';
        $issuedesc1 = $issuedesc;
        $issuedesc = '';
    }

    // Insert query
    $query = $wpdb->prepare(
        "INSERT INTO $tablename 
        (`equipment_id`, `operator_id`, `created_on`, `problem_description`, `ins_remarks`, `status`, `priority_level`, `order_id`, `stype`, `assigned_id`, `images`, `reported_date`) 
        VALUES (%d, %d, %s, %s, %s, %s, %s, %d, %d, %d, %s, %s)",
        $equipmentid, $id, $date, $issuedesc, $issuedesc1, $st, $priority, $orderId, $stype,
        $assignedId, $images, $reportedDate
    );

    $sql = $wpdb->query($query);

    if ($wpdb->last_error) {
        return new WP_REST_Response([
            'message' => 'Unable to save data',
            'reason' => "Error in insert data: $wpdb->last_error",
            'date' => $date,
            'success' => 0
        ]);
    }

    $sqlid = $wpdb->insert_id;
    if ($sqlid == 0) {
        return new WP_REST_Response(['message' => 'Unable to save. ID should be incremented.'], 400);
    }

    // File upload block (if used)
    $imagenotsaved = [];
    $uploadedfileslist = [];
    if (key_exists('images', $_FILES)) {
        $upload_dir = wp_upload_dir();
        $upload_path = $upload_dir['basedir'] . "/operator-service-request-attachments/";
        if (!is_dir($upload_path)) wp_mkdir_p($upload_path);

        $total = count($_FILES['images']['name']);
        $attachmenntTable = "wp_service_attachment_docs";

        for ($i = 0; $i < $total; $i++) {
            $datespre = date('ymdHis');
            $file_name = $_FILES['images']['name'][$i];
            $file_name = (strlen($file_name) > 80) ? substr($file_name, -70) : $file_name;
            $file_name = $datespre . $file_name;
            $file_tmp_name = $_FILES['images']['tmp_name'][$i];
            $file_path = $upload_path . basename($file_name);

            if (move_uploaded_file($file_tmp_name, $file_path)) {
                $wpdb->insert($attachmenntTable, [
                    "log_id" => $sqlid,
                    "attachment" => $file_name,
                    "created_on" => date('Y-m-d H:i:s'),
                ]);
                $uploadedfileslist[] = $file_name;
            } else {
                $imagenotsaved[] = ['id' => $sqlid, 'date' => $date];
            }
        }
    }

    $encrypted = encryptdaata([
        'message' => 'Data saved.',
        'imagenotsaved' => $imagenotsaved,
        'uploadedfileslist' => $uploadedfileslist,
        'success' => 1,
        'id' => $sqlid,
        'st' => $st
    ]);
    return new WP_REST_Response($encrypted);
}



// function saveServiceRequestf($request)
// {
//     // $parametresen = $request->get_body_params();
//     // $parameters =  decryptdaata($parametresen['params']);


//     $parametresen = json_decode($request->get_body(), true); // <-- safest way
//     $paramData = $parametresen['params'] ?? [];

//     if (is_array($paramData)) {
//         $parametres = $paramData;
//     } else {
//         $parametres = decryptdaata($paramData); // if you're using encryption
//     }

//     $id = $parameters['id'];
//     $equipmentid = $parameters['equipmentId'] ?? 0;
//     $priority = $parameters['priority'];
//     $date = $parameters['date'];
//     $issuedesc = addslashes($parameters['issuedesc']);
//     $images = $parameters['images'];
//     $orderId = $parameters['order_id'] ?? 0;
//     $stype = $parameters['stype'];


//     if (!isset($parameters['stype'])) {
//         return new WP_REST_Response(array('message' => 'Invalid request, try with updatetd application.', 'success' => 0), 400);
//     }
//     global $wpdb;
//     $upload_dir = wp_upload_dir();

//     $upload_path = $upload_dir['basedir'] . "/operator-service-request-attachments/";

//     // Ensure the uploads directory exists
//     if (!is_dir($upload_path)) {
//         wp_mkdir_p($upload_path);
//     }
//     $tablename = $wpdb->prefix . 'service_request';
//     // $time = current_time('mysql', 1);
//     // $inRow .= "('$id','$date','$shift','$startTime','$endTime','$startSMU','$endSMU','$fuel')";
//     // $user = get_user_by('ID', $id);
//     // $email = $user->user_email;
//     $contractId = get_user_meta($id, 'contract_id', true);
//     if ($contractId != $orderId) {
//         return new WP_REST_Response(array('message' => "Contract details mismatched. Please go to the MyAccount page to verify contract/customer details and then try again. " . $contractId . " or" . $orderId . " id: $id", 'success' => 0), 400);
//     }
//     $st =  'Raised'; //'AtWorkLocation';//
//     $issuedesc1 = '';
//     if ($stype == 1 || $stype == 2) {
//         $st = 'Image uploaded';
//         $issuedesc1 = $issuedesc;
//         $issuedesc = '';
//     }
//     $inRow = "( '$equipmentid', '$id', now(),  '$issuedesc','$issuedesc1','$st','$priority','$contractId','$stype')";
//     // die($inRow);
//     $query = "INSERT INTO $tablename (`equipment_id`, `operator_id`, `created_on`, `problem_description`,`ins_remarks`,`status`,`priority_level`,`order_id`,`stype`)  VALUES $inRow ;";

//     // die($query);
//     $sql = $wpdb->query($query);
//     if ($wpdb->last_error) {
//         return new WP_REST_Response(array('message' => 'Unable to save data', 'reason' => "Error in insert data:  $wpdb->last_error ", 'date' => $date, 'success' => 0));
//     }
//     $sqlid = $wpdb->insert_id;
//     if ($sqlid == 0) {
//         return new WP_REST_Response(array('message' => 'Unable to save. ID should be incremented.'), 400);
//     }
//     $attachmenntTable =  "wp_service_attachment_docs";
//     $imagenotsaved = [];
//     $uploadedfileslist = [];
//     if (key_exists('images', $_FILES)) {
//         $total = count($_FILES['images']['name']);
//         for ($i = 0; $i < $total; $i++) {
//             $datespre =   date('ymdHis');
//             $file_name =  $_FILES['images']['name'][$i];
//             $file_name = (strlen($file_name) > 80) ? substr($file_name, -70) : $file_name;
//             $file_name = $datespre . $file_name;
//             $file_tmp_name = $_FILES['images']['tmp_name'][$i];
//             $file_path = $upload_path . basename($file_name);
//             if (move_uploaded_file($file_tmp_name, $file_path)) {
//                 $wpdb->insert($attachmenntTable, [
//                     "log_id" => $sqlid,
//                     "attachment" => $file_name,
//                     "created_on" => date('Y-m-d H:i:s'),
//                 ]);
//                 $uploadedfileslist[] = $file_name;
//             } else {
//                 $imagenotsaved[] = ['id' => $sqlid, 'date' => $date];
//             }
//         }
//     }
//     $encrypted = encryptdaata(array('message' => 'Data saved.', 'imagenotsaved' => $imagenotsaved, ' uploadedfileslist' => $uploadedfileslist, 'success' => 1, 'id' => $sqlid, 'st' => $st));
//     return new WP_REST_Response($encrypted);
// }



// -------------------------------------------------------------------------------------- END TP EDIT

function checkAppUpdatef($request)
{
    $parametresen = $request->get_body_params();
    $parameters =  decryptdaata($parametresen['params']);
    $id = $parameters['id'];
    $appId = $parameters['appId'];
    $appver = $parameters['appVer'];
    $deviceId = $parameters['deviceId'];
    if (empty($appId) || empty($appver) ||  empty($id) || empty($deviceId)) {
        return new WP_REST_Response(array('message' => 'Invalid request'), 400);
    }
    global $wpdb;
    $table_name = $wpdb->prefix . 'mobapps';
    /**
     * for customer app appid = 1,
     * for operator app appid = 2,
     * for admin app appid = 3, 
     */
    $query = "SELECT * FROM $table_name where appId='$appId' ORDER BY updatetime DESC LIMIT 1 ";

    $result = $wpdb->get_results($query);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to fetch data. Please try later', 'reason' => $wpdb->last_error), 400);
    }
    $message = "Application not found";
    $success = 0;
    if ($result) {
        $message = "";
        $success = 1;
        $result = $result[0];
    }
    $encrypeddata = encryptdaata(array('message' => $message, 'appdata' => $result, 'success' => $success));
    return new WP_REST_Response($encrypeddata, 200);
}


function checkAppUpdateupf($request)
{
    $parameters = $request->get_body_params();
    // $parameters =  $parametresen['params'];
    $id = $parameters['id'];
    $appId = $parameters['appId'];
    $appver = $parameters['appVer'];
    $verName = $parameters['verName'];
    $app = $parameters['app'];
    if (empty($appId) || empty($appver) ||  empty($id)) {
        return new WP_REST_Response(array('message' => 'Invalid request'), 400);
    }
    global $wpdb;
    $table_name = $wpdb->prefix . 'mobapps';
    /**
     * for customer app appid = 1,
     * for operator app appid = 2,
     * for admin app appid = 3, 
     */
    $query = "SELECT * FROM $table_name where appId='$appId' ORDER BY updatetime DESC LIMIT 1 ";

    $result = $wpdb->get_results($query);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to fetch data. Please try later', 'reason' => $wpdb->last_error), 400);
    }

    $wpdb->delete($table_name, array("appid" => $appId));
    $wpdb->insert($table_name, array("app" => $app, "ver_no" => $appver, "ver_name" => $verName, "appid" => $appId));

    $message = "Application not found";
    $success = 0;
    if ($result) {
        $message = "";
        $success = 1;
        $result = $result[0];
    }
    $encrypeddata = array('message' => $message, 'appdata' => $result, 'success' => $success);
    return new WP_REST_Response(json_encode($encrypeddata), 200);
}

function sosf($request)
{
    // $parametresen = $request->get_body_params();
    // $parameters =  decryptdaata($parametresen['params']);

$parametresen = json_decode($request->get_body(), true);
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parameters = $paramData;
    } else {
        $parameters = decryptdaata($paramData); // if you're using encryption
    }


    $id = $parameters['id'];
    $comments = $parameters['comments'];
    // $machine = json_decode($parameters['machine'], true);
    $machine = $parameters['machine'];

    // die(json_encode($machine));
    global $wpdb;

    $table_name = $wpdb->prefix . 'sos';
    $created_on = date('Y-m-d H:i:s');
    $user_meta  = get_userdata($id);
    $contractId = get_user_meta((int)$id, 'contract_id', true);
    $location = get_user_meta((int)$id, 'billing_city', true);


    $oprname = $user_meta->user_firstname . " " . $user_meta->user_lastname;
    $machinetitle = $machine['title'];
    $machineid = $machine['id'];
    $roles = $user_meta->roles;
    
    if (!in_array('operator', $roles)) {
        return new WP_REST_Response(array('message' => 'You are not ', 'reason' => "Error in insert data:  $wpdb->last_error "), 400);
    }
    $inRow = "('$id','Emergency alert message from $oprname($id) Machine $machinetitle($machineid), located in $location', '$comments', '$created_on','$contractId')";
    $query = "INSERT INTO $table_name ( `operator_id`, `sos_messag`, `comments`, `created_on`,`order_id`)  VALUES $inRow ;";
    // die($query);
    $sql = $wpdb->query($query);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to save data', 'reason' => "Error in insert data:  $wpdb->last_error "), 400);
    }
    if ($sql) {
        $encrypeddata = encryptdaata(array('message' => 'Emergency alert message sent. Team will contact you soon.',));
        return new WP_REST_Response($encrypeddata, 200);
    }
}

/** get logsheet by order */
function getLogsheetByOrderf($request) {
    $parametresen =  $request->get_body_params();
    $parametres =  decryptdaata($parametresen['params']);
    $user_id = $parametres['user_id'];
    $order_id = $parametres['order_id'];
    $dates =  json_decode(($parametres['dates'] ?? '[]'));
    $page = $parametres['page'] ?? 1;
    $perpage = $parametres['perpage'] ?? 10;
    $limit = " limit $perpage";
    $daterange = "";
    if ($page > 1) {
        $perpage1 = $page * $perpage;
        $perpage1 = ($perpage1 - $perpage);
        $limit = " limit $perpage1,$perpage";
    }

    $daterange = "";
    if (count($dates) > 0) {
        $fromDate = $dates[0];
        $endDate = $dates[1];
        if (empty($fromDate) || empty($endDate)) {
            $limits = "LIMIT 10";
        } else {
            $limit = "";
            $daterange = " AND a.log_date between '$fromDate' and '$endDate' ";
        }
    }
    $whereOrderid = "";
    if ($order_id != '') {
        $whereOrderid = " AND order_id='$order_id'";
    }
    global $wpdb;
    $table_name = "wp_logsheet";
    $tableNameOrders  = $wpdb->prefix . "wc_orders";
    // $query = "SELECT a.*,concat('[ ',GROUP_CONCAT('{\"',b.id,'\":\"',b.attachment,'\"}'),']') docs FROM $table_name a left join $table_nameb b on a.id=b.log_id where a.order_id='$order_id' $daterange GROUP BY a.id ORDER BY a.log_date DESC $limits ";
    $query = "SELECT a.* FROM $table_name a where order_id in(SELECT id  from $tableNameOrders WHERE  customer_id=$user_id)  $whereOrderid  ORDER BY a.log_date DESC $limit ";
    $result = $wpdb->get_results($query, ARRAY_A);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
    }
    $rows = [];
    if ($result) {
        global $host;
        for ($i = 0; $i < count($result); $i++) {
            $resultd = (object)$result[$i];
            $orderid = $resultd->order_id;
            $resultd->equipment_id;
            try {
                // $result[$i]['COMPANY']="company selecrewd";
                if ($orderid > 0) {
                    $order = wc_get_order($orderid);
                    $customerId =  $order->get_customer_id();
                    // $order = wc_get_order($orderid);
                    // $companyName = $order->get_billing_company();
                    // if ($companyName == '') {
                    //     $companyName = $order->get_billing_first_name();
                    // }
                    // $result[$i]['company'] = $companyName;
                    // $result[$i]['log_status'] = intval($resultd->log_status);
                    $first_name =  get_user_meta($resultd->operator_id, 'first_name', true);
                    $last_name =  get_user_meta($resultd->operator_id, 'last_name', true);
                    $productTitle =  get_the_title($resultd->equipment_id);
                    $result[$i]['operatorName'] = "$first_name $last_name";
                    $result[$i]['productName'] =  $productTitle;
                    $result[$i]['customerid'] =  $customerId;
                }
            } catch (\Throwable $th) {
                // $result[$i]['company']=$th->getMessage();
            }
        }
        $imgUrlfolder = "$host/wp-content/uploads/operator-logs-attachments/";
        $encrypted = encryptdaata(array('message' => '', 'logs' => $result, 'imgUrlfolder' => $imgUrlfolder));
        return new WP_REST_Response($encrypted, 200);
    } else {
        if ($page > 1) {
            $resulta = array('message' => '', 'logs' => $result, 'imgUrlfolder' => '');
            $encrypted = encryptdaata($resulta);
            return new WP_REST_Response($encrypted, 200);
        }
        if ($daterange != "") {
            $encrypted = array('message' => 'No Logs available between these dates' . implode(", ", $dates), 'logs' => $rows);
        } else {
            $encrypted = array('message' => 'No logs are available yet. Please check with operator.', 'logs' => $rows);
        }
        return new WP_REST_Response($encrypted, 400);
    }
}

/** Approve logs by customer */
function saveLogsApprovef($request)
{
    $parametresen =  $request->get_body_params();
    $parametres =  decryptdaata($parametresen['params']);
    $user_id = intval($parametres['user_id']);
    $order_id = intval($parametres['order_id']);
    $id = intval($parametres['id']);
    $reason = $parametres['reason'];
    $status = intval($parametres['status']);
    global $wpdb;
    $data_update = array('log_status' => $status, 'log_remarks' => $reason, 'remarks_by' => $user_id);
    $data_where = array('id' => $id, 'order_id' => $order_id);
    $res = $wpdb->update('wp_logsheet', $data_update, $data_where, array('%d', '%s', '%d', array('%d', '%d')));
    if (is_wp_error($res)) {
        return new WP_REST_Response(array('message' => 'Unable to update. Please try later131.', 'reason' => $wpdb->last_error), 409);
    }
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to update. Please try later.', 'reason' => $wpdb->last_error), 409);
    }
    if ($res) {
        $encrypted = encryptdaata(array('message' => 'Log status saved successfully.', 'success' => 1));
        return new WP_REST_Response($encrypted, 200);
    } else {
        $encrypted = array('message' => 'Unable to save your status. Please try later!.', 'success' => 0);
        return new WP_REST_Response($encrypted, 400);
    }
}
/** get bulk logsheet for approval */
function getLogsheetForApprovalf($request): WP_REST_Response
{
    $parametresen =  $request->get_body_params();
    $parametres =  decryptdaata($parametresen['params']);
    $user_id = $parametres['user_id'];
    $order_id = $parametres['order_id'];
    $dates =  json_decode(($parametres['dates'] ?? '[]'));
    $page = $parametres['page'] ?? 1;
    $perpage = $parametres['perpage'] ?? 10;
    $limit = " limit $perpage";
    $daterange = "";
    if ($page > 1) {
        $perpage1 = $page * $perpage;
        $perpage1 = ($perpage1 - $perpage);
        $limit = " limit $perpage1,$perpage";
    }

    if (count($dates) > 0) {
        $fromDate = $dates[0];
        $endDate = $dates[1];
        if (empty($fromDate) || empty($endDate)) {
            $limits = "LIMIT 10";
        } else {
            $limit = "";
            $daterange = " AND a.log_date between '$fromDate' and '$endDate' ";
        }
    }
    $whereOrderid = "";
    if ($order_id != '') {
        $whereOrderid = " AND order_id='$order_id'";
    }
    global $wpdb;
    $table_name = "wp_log_files_data ";

    // $query = "SELECT a.*,concat('[ ',GROUP_CONCAT('{\"',b.id,'\":\"',b.attachment,'\"}'),']') docs FROM $table_name a left join $table_nameb b on a.id=b.log_id where a.order_id='$order_id' $daterange GROUP BY a.id ORDER BY a.log_date DESC $limits ";
    $query = "SELECT * FROM $table_name where custtomer_id='$user_id' $whereOrderid $daterange order by id desc $limit"; // a where customer_id=$user_id $whereOrderid  $limits";

    $result = $wpdb->get_results($query, ARRAY_A);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to fetch logs. Please try later', 'reason' => $wpdb->last_error), 400);
    }
    $rows = [];
    if ($result) {
        for ($i = 0; $i < count($result); $i++) {
            $resultd = (object)$result[$i];
            $orderid = $resultd->contract_id;

            try {
                // $result[$i]['COMPANY']="company selecrewd";
                if ($orderid > 0) {
                    $order = wc_get_order($orderid);
                    // $customerId =  $order->get_customer_id();
                    // $order = wc_get_order($orderid);
                    // $companyName = $order->get_billing_company();
                    // if ($companyName == '') {
                    //     $companyName = $order->get_billing_first_name();
                    // }
                    // $result[$i]['company'] = $companyName;
                    // $result[$i]['log_status'] = intval($resultd->log_status);
                    $first_name =  get_user_meta($resultd->user_id, 'first_name', true);
                    $last_name =  get_user_meta($resultd->user_id, 'last_name', true);
                    $result[$i]['operatorName'] = "$first_name $last_name";
                    $oitems =  $order->get_items();
                    foreach ($oitems as $key => $oitem) {
                        $orderItemData =  $order->get_item($key);
                        if ($orderItemData) {
                            $machineassoc = $orderItemData['product_id'];
                            $producttitle = $orderItemData['name'];
                            // $equipment_number = get_post_meta($machineassoc, 'equipment_number', true);
                            $equipment_serial_number = get_post_meta($machineassoc, 'equipment_serial_number', true);
                            $result[$i]['productName'] =  $producttitle;
                            $result[$i]['equipment_serial_number'] =  $equipment_serial_number;
                        }
                    }
                }
            } catch (\Throwable $th) {
                // $result[$i]['company']=$th->getMessage();
            }
        }

        $encrypted = encryptdaata(array('message' => '', 'logs' => $result));
        return new WP_REST_Response($encrypted, 200);
    } else {
        if ($page > 1) {
            $resulta = array('message' => '', 'logs' => []);
            $encrypted = encryptdaata($resulta);
            return new WP_REST_Response($encrypted, 200);
        }
        if ($daterange != "") {
            $encrypted = array('message' => 'No Logs available between these dates' . implode(", ", $dates), 'logs' => $rows);
        } else {
            $encrypted = array('message' => 'No logs are available yet. Please contact Gmmco team.', 'logs' => $rows);
        }
        return new WP_REST_Response($encrypted, 400);
    }
}


// function getOperatorMachineAndInspectionf($request) {
//     $parametresen = json_decode($request->get_body(), true);
//     $paramData = $parametresen['params'] ?? [];
//     if (is_array($paramData)) {
//         $parameters = $paramData;
//     } else {
//         $parameters = decryptdaata($paramData); // if you're using encryption
//     }
//     $operator_id = intval($parameters['operator_id'] ?? 0);
//     if (!$operator_id) {
//         return new WP_REST_Response(array('message' => 'Operator ID is required.'), 400);
//     }
//     global $wpdb;
//     // Get assigned machine and order info for this operator
//     $assign_table = $wpdb->prefix . 'assign_operators_contracts';
//     $assignment = $wpdb->get_row(
//         $wpdb->prepare(
//             "SELECT * FROM $assign_table WHERE operator_id = %d ORDER BY created_on DESC LIMIT 1",
//             $operator_id
//         ),
//         ARRAY_A
//     );
//     if (!$assignment) {
//         return new WP_REST_Response(array('message' => 'No machine assigned to the operator.'), 404);
//     }

//     $machine_id = (int)($assignment['meachine_id'] ?? 0);  // assuming column is machine_id (note typo in original)
//     $contract_id = (int)($assignment['contract_id'] ?? 0);

//     if (!$machine_id) {
//         return new WP_REST_Response(array('message' => 'Assigned machine not found.'), 404);
//     }

//     // Get machine (product) details
//     $machine_post = get_post($machine_id);
//     if (!$machine_post) {
//         return new WP_REST_Response(array('message' => 'Machine details not found.'), 404);
//     }

//     // Prepare machine details
//     $machine_details = array(
//         'id' => $machine_post->ID,
//         'title' => $machine_post->post_title,
//         'equipment_name' => $machine_post->post_title,
//         'equipment_serial_number' => get_post_meta($machine_id, 'equipment_serial_number', true),
//         'image' => get_the_post_thumbnail_url($machine_id),
//     );

//     // Get contract start and end dates from wp_contracts table
//     $contracts_table = $wpdb->prefix . 'contracts';
//     $contract = $wpdb->get_row(
//         $wpdb->prepare(
//             "SELECT contract_start_date, contract_end_date FROM $contracts_table WHERE contract_id = %d LIMIT 1",
//             $contract_id
//         ),
//         ARRAY_A
//     );
//     $start_date = $contract['contract_start_date'] ?? null;
//     $end_date = $contract['contract_end_date'] ?? null;

//     // Get current datetime (WordPress server time)
//     $now = current_time('Y-m-d H:i:s');

//     // Determine user_athority based on contract dates and inspection
//     $user_athority = false;
//     if ($start_date && $end_date) {
//         $now_ts = strtotime($now);
//         $start_ts = strtotime($start_date);
//         $end_ts = strtotime($end_date);

//         if ($now_ts >= $start_ts && $now_ts <= $end_ts) {
//             // If current time is within contract period and inspection exists
//             $inspection_check = false;
//             $table_name = $wpdb->prefix . 'service_request';
//             $inspection = $wpdb->get_row(
//                 $wpdb->prepare(
//                     "SELECT * FROM $table_name WHERE operator_id = %d AND equipment_id = %d AND order_id = %d AND stype = 1 ORDER BY created_on DESC LIMIT 1",
//                     $operator_id,
//                     $machine_id,
//                     $contract_id
//                 ),
//                 ARRAY_A
//             );
//             if ($inspection) {
//                 $inspection_check = true;
//             }

//             if ($inspection_check && $machine_details != null) {
//                 $user_athority = true;
//             }
//         }
//     }

//     // Prepare and return response
//     $response = array(
//         'machine' => $machine_details,
//         'initial_inspection' => $inspection ?? null,
//         'contract_start_date' => $start_date,
//         'contract_end_date' => $end_date,
//         'user_athority' => $user_athority,
//     );

//     $encrypted = encryptdaata($response);
//     return new WP_REST_Response($encrypted, 200);
// }

function getOperatorMachineAndInspectionf($request) {
    $parametresen = json_decode($request->get_body(), true);
    $paramData = $parametresen['params'] ?? [];
    if (is_array($paramData)) {
        $parameters = $paramData;
    } else {
        $parameters = decryptdaata($paramData); // if you're using encryption
    }
    $operator_id = intval($parameters['operator_id'] ?? 0);
    if (!$operator_id) {
        return new WP_REST_Response(array('message' => 'Operator ID is required.'), 400);
    }
    global $wpdb;
    // Get assigned machine and order info for this operator
    $assign_table = $wpdb->prefix . 'assign_operators_contracts';
    $assignment = $wpdb->get_row(
        $wpdb->prepare(
            "SELECT * FROM $assign_table WHERE operator_id = %d ORDER BY created_on DESC LIMIT 1",
            $operator_id
        ),
        ARRAY_A
    );
    if (!$assignment) {
        return new WP_REST_Response(array('message' => 'No machine assigned to the operator.'), 404);
    }

    $machine_id = (int)($assignment['meachine_id'] ?? 0);  // assuming column is machine_id (note typo in original)
    $contract_id = (int)($assignment['contract_id'] ?? 0);
	
	if (!empty($contractId)) {
		return new WP_REST_Response(array('message' => 'Contract Not found.'), 404);
	}
			
			
			
    
    if (!$machine_id) {
        return new WP_REST_Response(array('message' => 'Assigned machine not found.'), 404);
    }

    // Get machine (product) details
    $machine_post = get_post($machine_id);
    if (!$machine_post) {
        return new WP_REST_Response(array('message' => 'Machine details not found.'), 404);
    }

    // Prepare machine details
    $machine_details = array(
        'id' => $machine_post->ID,
        'title' => $machine_post->post_title,
        'equipment_name' => $machine_post->post_title,
        'equipment_serial_number' => get_post_meta($machine_id, 'equipment_serial_number', true),
        'image' => get_the_post_thumbnail_url($machine_id),
    );

    // Get contract start and end dates from wp_contracts table
    /* $contracts_table = $wpdb->prefix . 'contracts';
    $contract = $wpdb->get_row(
        $wpdb->prepare(
            "SELECT contract_start_date, contract_end_date FROM $contracts_table WHERE contract_id = %d LIMIT 1",
            $contract_id
        ),
        ARRAY_A
    );
    $start_date = $contract['contract_start_date'] ?? null;
    $end_date = $contract['contract_end_date'] ?? null; */
	
	
            $order = wc_get_order($contract_id);
			
			 $start_date = $order->get_meta('start_date', true);
             $end_date = $order->get_meta('end_date', true);
			

    // Get current datetime (WordPress server time)
    $now = current_time('Y-m-d H:i:s');
    // Determine user_athority based on contract dates and inspection
    $user_athority = false;
    if ($start_date && $end_date) {
        $now_ts = strtotime($now);
        $start_ts = strtotime($start_date);
        $end_ts = strtotime($end_date);
		
        if ($now_ts <= $start_ts && $now_ts <= $end_ts) {
            // If current time is within contract period and inspection exists
            $inspection_check = false;
            $table_name = $wpdb->prefix . 'service_request';
            $inspection = $wpdb->get_row(
                $wpdb->prepare(
                    "SELECT * FROM $table_name WHERE operator_id = %d AND equipment_id = %d AND order_id = %d AND stype = 1 ORDER BY created_on DESC LIMIT 1",
                    $operator_id,
                    $machine_id,
                    $contract_id
                ),
                ARRAY_A
            );
            if ($inspection) {
                $inspection_check = true;
            }

            if ($inspection_check && $machine_details != null) {
                $user_athority = true;
            }
        }else{
			return new WP_REST_Response(array('message' => 'Contract Expired'), 404);
		}
    }

    // Prepare and return response
    $response = array(
        'machine' => $machine_details,
        'initial_inspection' => $inspection ?? null,
        'contract_start_date' => $start_date,
        'contract_end_date' => $end_date,
        'user_athority' => $user_athority,
    );

    $encrypted = encryptdaata($response);
    return new WP_REST_Response($encrypted, 200);
}


/** Approve bulk logs by customer */
function approvelogbulkf($request): WP_REST_Response
{
    $parametresen =  $request->get_body_params();
    $parametres =  decryptdaata($parametresen['params']);
    $customer_id = intval($parametres['myid']);
    $order_id = intval($parametres['order_id']);
    $id = intval($parametres['id']);
    $reason = $parametres['reason'];
    $status = intval($parametres['status']);
    $logStatus = "Pending";
    if ($status == 1) {
        $logStatus = "Accepted";
    } else if ($status == 2) {
        $logStatus = "Modify";
    }
    global $wpdb;

    $data_update = array('log_approve_status' => $logStatus, 'log_user_remarks' => $reason, 'updated_at' => date('Y-m-d H:i:s'));
    $data_where = array('id' => $id, 'customer_id' => $customer_id);
    $res = $wpdb->update('wp_log_files_data', $data_update, $data_where, array('%s', '%s', '%s', array('%d', '%d')));
    if (is_wp_error($res)) {
        return new WP_REST_Response(array('message' => 'Unable to update. Please try later.', 'reason' => $wpdb->last_error), 409);
    }
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to update. Please try later.', 'reason' => $wpdb->last_error), 409);
    }
    if ($res) {
        $encrypted = encryptdaata(array('message' => 'Log status saved successfully.', 'remark' => $reason, 'status' => $logStatus, 'success' => 1));
        return new WP_REST_Response($encrypted, 200);
    } else {
        $encrypted = array('message' => 'Unable to save your status. Please try later!.', 'success' => 0);
        return new WP_REST_Response($encrypted, 400);
    }
}
/** show all user admin */
function showUsersf($request)
{
    $args1 = array(
        'role' => 'customer', //subscriber',
        'orderby' => 'ID',
        'order' => 'ASC'
    );
    $resulta = get_users($args1);
    $resultdata = [];
    if (count($resulta) > 0) {
        for ($i = 0; $i < count($resulta); $i++) {
            $user = (array)$resulta[$i];
            $resultd = $user['data'];
            unset($resultd->user_login);
            unset($resultd->user_pass);
            $user_meta['user_phone'] =  get_user_meta($resultd->ID, 'user_phone', true);
            $user_meta['first_name'] =  get_user_meta($resultd->ID, 'first_name', true);
            $user_meta['last_name'] =  get_user_meta($resultd->ID, 'last_name', true);
            $user_meta['display_name'] = $resultd->display_name;
            $user_meta['ID'] = $resultd->ID;
            $user_meta['display_name'] = $resultd->display_name;
            $user_meta['user_email'] = $resultd->user_email;
            $user_meta['user_registered'] = $resultd->user_registered;
            $resultdata[] =  $user_meta;
        }
    }

    return new WP_REST_Response($resultdata, 200);
}

function getMachineAssociated( $user_id ){
  global $wpdb;
  $post_id = get_user_meta($user_id, 'machine_associated', true);
  $sql = "SELECT `ID`, `post_title` FROM `wp_posts` WHERE `post_type` = 'product' AND `ID` = %d";
  $row = $wpdb->get_row( $wpdb->prepare($sql, $post_id) );

  if ($row) {
    return $row;
  }
}

function getCustomerAssociated( $user_id ){
  global $wpdb;
  $cust_id = get_user_meta($user_id, 'customer_associated', true);
  $sql = "SELECT `ID`, `user_nicename`, `display_name`, `user_url` FROM `wp_users` WHERE `ID` = %d";
  $row = $wpdb->get_row( $wpdb->prepare($sql, $cust_id) );

  if ($row) {
    return $row;
  }
}

function userDetailsByIdf($request)
{
    $parametresen = json_decode($request->get_body(), true); // <-- safest way
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }
    
    // $parametresen =  $request->get_body_params();
    // $parametres =  decryptdaata($parametresen['params']);
    $user_id = intval($parametres['user_id']);

    // $resulta = get_users($args1);
    // $resulta = get_user_by('ID',$user_id);
    $resultd = (object)get_userdata($user_id);
    $resultdata = [];
    if ($resultd) {

        // $user = (array)$resulta;
        // $resultd = $user['data'];
        unset($resultd->user_login);
        unset($resultd->user_pass);
        $user_meta['user_phone'] =  get_user_meta($resultd->ID, 'user_phone', true);
        $user_meta['first_name'] =  get_user_meta($resultd->ID, 'first_name', true);
        $user_meta['last_name'] =  get_user_meta($resultd->ID, 'last_name', true);
        $user_meta['location'] =  get_user_meta($resultd->ID, 'location', true);
        $user_meta['profile_image'] =  get_user_meta($resultd->ID, 'profile_image', true);
        $user_meta['age'] =  get_user_meta($resultd->ID, 'age', true);
        $user_meta['gender'] =  get_user_meta($resultd->ID, 'gender', true);
        $user_meta['machine_associated'] =  getMachineAssociated($resultd->ID);
        $user_meta['customer_associated'] =  getCustomerAssociated($resultd->ID);
        $user_meta['gender'] =  get_user_meta($resultd->ID, 'gender', true);
        $user_meta['display_name'] = $resultd->display_name;
        $user_meta['ID'] = $resultd->ID;
        $user_meta['display_name'] = $resultd->display_name;
        $user_meta['user_email'] = $resultd->user_email;
        $user_meta['user_registered'] = $resultd->user_registered;

        $statecode =  get_user_meta($user_id, 'billing_state', true);
        $countrycode =  get_user_meta($user_id, 'billing_country', true);
        $contries = new WC_Countries();
        $states = $contries->get_states($countrycode);
        $state = $states[$statecode];
        $user_meta['billing_address'] = [
            // $address = [
            'billing_first_name' => get_user_meta($user_id, 'billing_first_name', true),
            'billing_last_name' => get_user_meta($user_id, 'billing_last_name', true),
            'billing_email' => get_user_meta($user_id, 'billing_email', true),
            'billing_address_1' => get_user_meta($user_id, 'billing_address_1', true),
            'billing_address_2' => get_user_meta($user_id, 'billing_address_2', true),
            'billing_city' =>  get_user_meta($user_id, 'billing_city', true),
            'billing_postcode' => get_user_meta($user_id, 'billing_postcode', true),
            'billing_phone' => get_user_meta($user_id, 'billing_phone', true),
            'billing_state' => strtoupper($state), // $state,// get_user_meta($user_id, 'billing_state',true),
            'billing_state_code' => $statecode,
            'billing_country' => get_user_meta($user_id, 'billing_country', true),
        ];
        // $user_meta['address'] =  WC()->countries->get_formatted_address( apply_filters( 'woocommerce_my_account_my_address_formatted_address', $address, $user_id, 'billing' ) );

        $statecode =  get_user_meta($user_id, 'shipping_state', true);
        $countrycode =  get_user_meta($user_id, 'billing_country', true);
        $states = $contries->get_states($countrycode);
        $state = $states[$statecode];
        $user_meta['shipping_address'] = [
            'shipping_first_name' => get_user_meta($user_id, 'shipping_first_name', true),
            'shipping_last_name' => get_user_meta($user_id, 'shipping_last_name', true),
            'shipping_email' => get_user_meta($user_id, 'shipping_email', true),
            'shipping_address_1' => get_user_meta($user_id, 'shipping_address_1', true),
            'shipping_address_2' => get_user_meta($user_id, 'shipping_address_2', true),
            'shipping_city' =>    get_user_meta($user_id, 'shipping_city', true),
            'shipping_postcode' => get_user_meta($user_id, 'shipping_postcode', true),
            'shipping_phone' => get_user_meta($user_id, 'shipping_phone', true),
            'shipping_state' => strtoupper($state), // get_user_meta($user_id, 'shipping_state',true),
            'shipping_state_code' => $statecode,
            'shipping_country' => get_user_meta($user_id, 'shipping_country', true),
        ];



        $resulta = array("data" => $user_meta, 'success' => 1);
        $encrypted = encryptdaata($resulta);
        return new WP_REST_Response($encrypted, 200);
    } else {
        $resulta = array("message" => "Unable to get user details", 'success' => 0);

        return new WP_REST_Response($resulta, 400);
    }
}

function updateProfileV2($request)
{
//   $user_id = apply_filters( 'determine_current_user', false );
//   wp_set_current_user( $user_id );
//   if (isset($_FILES['profile_image']) && $_FILES['profile_image']['size'] > 0) {
//     $upload = wp_handle_upload($_FILES['profile_image'], array('test_form' => false));
//     if (isset($upload['url']) && !isset($upload['error'])) {
//       update_user_meta($user_id, 'profile_image', $upload['url']);
//     }
//   }
$params = $request->get_params();
  $user_id = isset($params['user_id']) ? intval($params['user_id']) : 0;

  if (!$user_id) {
    return new WP_REST_Response(['message' => 'User ID missing.'], 400);
  }

  if (isset($_FILES['profile_image']) && $_FILES['profile_image']['size'] > 0) {
    $upload = wp_handle_upload($_FILES['profile_image'], array('test_form' => false));
    if (isset($upload['url']) && !isset($upload['error'])) {
      update_user_meta($user_id, 'profile_image', $upload['url']);
    }
  }

  $user_meta = [];
  $user_meta['id'] =  $user_id;
  $user_meta['profile_image'] =  get_user_meta($user_id, 'profile_image', true);
  $resultdata = [
    'success' => true,
    'message' => 'Profile data updated successfully',
    'user' => $user_meta
  ];

  return new WP_REST_Response($resultdata, 200);
}

function updateProfilef($request)
{
     $parametresen = json_decode($request->get_body(), true); // <-- safest way
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }
    

    // $parametresen =  $request->get_body_params();
    // $parametres =  decryptdaata($parametresen['params']);

    $user_id = intval($parametres['user_id']);
    $first_name = $parametres['first_name'];
    $last_name = $parametres['last_name'];
    $display_name = $parametres['display_name'];
    $user_email = $parametres['email'];
    $user_phone = $parametres['phone'];
    $address_1 = $parametres['address_1'];
    $address_2 = $parametres['address_2'];
    $city = $parametres['city'];
    $state = $parametres['state'];
    $postcode = $parametres['postcode'];
    $type = $parametres['type'];

    global $wpdb;


    $tablename = $wpdb->prefix . "usermeta";
    if ($type == 'profile') {

        $sqlquery = "update `wp_users` set display_name='$display_name', user_email='$user_email' where ID=$user_id";
        $wpdb->query($sqlquery);
        if ($wpdb->last_error) {
            return new WP_REST_Response(array('message' => 'Unable to update. Please try later.' . $wpdb->last_error, 'reason' => $wpdb->last_error), 409);
        }
        update_user_meta($user_id, 'first_name', $first_name);
        update_user_meta($user_id, 'last_name', $last_name);
        update_user_meta($user_id, 'user_phone', $user_phone);
        update_user_meta($user_id, 'email', $user_email);
        update_user_meta($user_id, 'location', $state);
        $resulta = array("message" => 'profile updated.', 'success' => 1);
        // die(json_encode($resulta));
        $encrypted = encryptdaata($resulta);
        return new WP_REST_Response($encrypted, 200);
    } else if ($type == 'billing_address') {

        // $data_update = array('billing_first_name' => $first_name, 'billing_last_name' => $last_name, 'billing_email' => $user_email,'billing_address_1'=>$address_1,'billing_address_2'=>$address_2,
        // 'billing_city'=>$city,'billing_state'=>$state, 'billing_postcode'=>$postcode,'billing_phone'=>$user_phone);
        // $data_where = array('user_id' => $user_id);
        $res = update_user_meta($user_id, 'billing_first_name', $first_name);
        $res =  update_user_meta($user_id, 'billing_last_name', $last_name);
        update_user_meta($user_id, 'billing_email', $user_email);
        update_user_meta($user_id, 'billing_address_1', $address_1);
        update_user_meta($user_id, 'billing_address_2', $address_2);
        update_user_meta($user_id, 'billing_city', $city);
        update_user_meta($user_id, 'billing_state', $state);
        update_user_meta($user_id, 'billing_postcode', $postcode);
        update_user_meta($user_id, 'billing_phone', $user_phone);

        // $res = $wpdb->update($tablename, $data_update, $data_where, array('%s', '%s', '%s','%s', '%s', '%s','%s', '%s', '%s'), array('%d'));
        // if (is_wp_error($res)) {
        //     return new WP_REST_Response(array('message' => 'Unable to update. Please try later.', 'reason' => $wpdb->last_error), 409);
        // }
        $resulta = array("message" => 'Billing address updated.', 'success' => 1);
        // die(json_encode($resulta));
        $encrypted = encryptdaata($resulta);
        return new WP_REST_Response($encrypted, 200);
    } else if ($type == 'shipping_address') {

        update_user_meta($user_id, 'shipping_first_name', $first_name);
        update_user_meta($user_id, 'shipping_last_name', $last_name);
        update_user_meta($user_id, 'shipping_email', $user_email);
        update_user_meta($user_id, 'shipping_address_1', $address_1);
        update_user_meta($user_id, 'shipping_address_2', $address_2);
        update_user_meta($user_id, 'shipping_city', $city);
        update_user_meta($user_id, 'shipping_state', $state);
        update_user_meta($user_id, 'shipping_postcode', $postcode);
        update_user_meta($user_id, 'shipping_phone', $user_phone);
        $resulta = array("message" => 'Shipping address updated.', 'success' => 1);
        // die(json_encode($resulta));
        $encrypted = encryptdaata($resulta);
        return new WP_REST_Response($encrypted, 200);
    }
}
function getStatesWithCodef($request)
{
    $parametresen =  $request->get_body_params();
    $contries = new WC_Countries();
    $states = $contries->get_states("IN");
    $resulta = array("data" => $states, 'success' => 1);
    // die(json_encode($resulta));
    $encrypted = encryptdaata($resulta);
    return new WP_REST_Response($encrypted, 200);
}
function delMyAccf($request)
{
    $parametresen =  $request->get_body_params();

    global $wpdb;
    $table_name = "wp_del_request";

    $name = $parametresen['fullname'];
    $email = $parametresen['emailid'];
    $mob = $parametresen['mobileno'];
    $reason = $parametresen['reason'];

    $inRow = "('$name','$email','$mob','$reason',now())";
    $query = "INSERT INTO $table_name (full_name,email,mobileno,reson,created_on)  VALUES $inRow ;";

    // die($query);
    $sql = $wpdb->query($query);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to save data'), 400);
    }
    if ($sql) {
        return new WP_REST_Response(array('message' => 'Request sent successfully.'),);
    }
}


function saveExpenseRequestf($request)
{
	
    $parametresen = json_decode($request->get_body(), true);
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parameters = $paramData;
    } else {
        $parameters = decryptdaata($paramData); // if you're using encryption
    }


    // $parametresen = $request->get_body_params();
    // $parameters =  decryptdaata($parametresen['params']);
    $id = $parameters['id'];
    $expensefor = $parameters['expensefor'] ?? 0;
    $priority = $parameters['priority'];
    $date = $parameters['date'];
    $issuedesc = addslashes($parameters['issuedesc']);
    $images = $parameters['images'];
    $orderId = $parameters['order_id'] ?? 0;
    $amount = $parameters['amount'];
    $machineId = $parameters['machineId']??0;



    global $wpdb;
    $upload_dir = wp_upload_dir();

    $upload_path = $upload_dir['basedir'] . "/operator-expenses-request-attachments/";

    // Ensure the uploads directory exists
    if (!is_dir($upload_path)) {
        wp_mkdir_p($upload_path);
    }
    $tablename = $wpdb->prefix . 'expenses_request';
    // $time = current_time('mysql', 1);
    // $inRow .= "('$id','$date','$shift','$startTime','$endTime','$startSMU','$endSMU','$fuel')";
    // $user = get_user_by('ID', $id);
    // $email = $user->user_email;
    $contractId = get_user_meta($id, 'contract_id', true);
    // echo $contractId;
    if ($contractId != $orderId) {
        return new WP_REST_Response(array('message' => "Contract details mismatched. Please go to the MyAccount page to verify contract/customer details and then try again. " . $contractId . " or" . $orderId . " id: $id", 'success' => 0), 400);
    }
    $st =  'Request Sent'; //'AtWorkLocation';//
    $issuedesc1 = '';

    $imageString = '';
if (is_array($images)) {
    // Escape each filename to avoid SQL injection or syntax issues
    $escapedImages = array_map(function($img) use ($wpdb) {
        return esc_sql($img); // or $wpdb->escape() depending on WP version
    }, $images);

    $imageString = implode(',', $escapedImages);
} else {
    // If $images is not an array, treat as empty or cast to string
    $imageString = '';
}

// Quote the string for SQL:
$imageStringQuoted = "'" . $imageString . "'";
$now = date('Y-m-d H:i:s');
    $inRow = "('$machineId', '$id', '$now', '$issuedesc', '$st', '$expensefor', '$contractId', '$amount', $imageStringQuoted)";
$query = "INSERT INTO $tablename 
    (`equipment_id`, `operator_id`, `created_on`, `problem_description`, `status`, `exp_reason`, `order_id`, `exp_amount`, `attachment`)
    VALUES $inRow ;";

    // die($query);
    $sql = $wpdb->query($query);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to save data', 'reason' => "Error in insert data:  $wpdb->last_error ", 'date' => $date, 'success' => 0));
    }
    $sqlid = $wpdb->insert_id;
    if ($sqlid == 0) {
        return new WP_REST_Response(array('message' => 'Unable to save. ID should be incremented.'), 400);
    }
    $attachmenntTable =  "wp_expenses_attachment_docs";
    $imagenotsaved = [];
    $uploadedfileslist = [];
    if (key_exists('images', $_FILES)) {
        $total = count($_FILES['images']['name']);
        for ($i = 0; $i < $total; $i++) {
            $datespre =   date('ymdHis');
            $file_name =  $_FILES['images']['name'][$i];
            $file_name = (strlen($file_name) > 80) ? substr($file_name, -70) : $file_name;
            $file_name = $datespre . $file_name;
            $file_tmp_name = $_FILES['images']['tmp_name'][$i];
            $file_path = $upload_path . basename($file_name);
            if (move_uploaded_file($file_tmp_name, $file_path)) {
                $wpdb->insert($attachmenntTable, [
                    "log_id" => $sqlid,
                    "attachment" => $file_name,
                    "created_on" => date('Y-m-d H:i:s'),
                ]);
                $uploadedfileslist[] = $file_name;
            } else {
                $imagenotsaved[] = ['id' => $sqlid, 'date' => $date];
            }
        }
    }
    // $encrypted = encryptdaata(array('message' => 'Data saved.', 'imagenotsaved' => $imagenotsaved, ' uploadedfileslist' => $uploadedfileslist, 'success' => 1, 'id' => $sqlid, 'st' => $st));

    $encrypted = encryptdaata(array('message' => 'Data saved.', 'success' => 1, 'id' => $sqlid, 'st' => $st));
    return new WP_REST_Response($encrypted);
}

function getExpensionf($request){
    // $parametresen =  $request->get_body_params();
    // $parametres =  decryptdaata($parametresen['params']);


$parametresen = json_decode($request->get_body(), true);
   $paramData = $parametresen['params'] ?? [];

    if (is_array($paramData)) {
        $parametres = $paramData;
    } else {
        $parametres = decryptdaata($paramData); // if you're using encryption
    }

    $user_id = $parametres['user_id'];
    // $dates =  json_decode($parametres['dates']);
    $dates = $parametres['dates'];

    $orderid = $parametres['order_id'] ?? '';
    $limits = "LIMIT 10";
    $daterange = "";
    if (count($dates) == 2) {
        $fromDate = $dates[0];
        $endDate = $dates[1];
        if (empty($fromDate) || empty($endDate)) {
            $limits = "LIMIT 10";
        } else {
            $limits = "";
            $daterange = " AND date(created_on) between '$fromDate' and '$endDate' ";
        }
    }
    $whereOrderId = '';
    if (!empty($orderid)) {
        $whereOrderId = " AND order_id=$orderid ";
    }
    global $wpdb;
    $table_name = $wpdb->prefix . 'expenses_request';
    $table_nameb = $wpdb->prefix . 'expenses_attachment_docs';

    // $querysrerv = "SELECT a.*,concat('[',GROUP_CONCAT('{\"',b.id,'\":\"',b.attachment,'\"}'),']') docs FROM $table_name a left join $table_nameb b on a.id=b.log_id WHERE  a.operator_Id='$user_id' $whereOrderId $daterange GROUP BY a.id ORDER BY a.created_on DESC $limits ";

  $querysrerv = "SELECT * FROM $table_name WHERE operator_id = '$user_id' $whereOrderId $daterange ORDER BY created_on DESC $limits";
 
    // die($querysrerv);
    // $query = "SELECT * FROM $table_name where operator_Id='$user_id' ORDER BY created_on DESC LIMIT 10 ";
    // $result1 = $wpdb->get_results("SELECT * FROM $table_name WHERE stype=1 and ");
    $result = $wpdb->get_results($querysrerv, ARRAY_A);
    if ($wpdb->last_error) {
        return new WP_REST_Response(array('message' => 'Unable to fetch expenses data. Please try later', 'reason' => $wpdb->last_error), 400);
    }
    if ($result) {
        for ($i = 0; $i < count($result); $i++) {
            // foreach ($result as $key => $value) {
            $value = (object)$result[$i];
            $orderid = $value->order_id;
        $order_id = $result[$i]['order_id'];

    
        if ($order_id) {
            // Query to get the equipment name from your items table
            $itemTable = 'wp_woocommerce_order_items';  // adjust table name
            $equipment_name = $wpdb->get_var(
                $wpdb->prepare("SELECT order_item_name FROM $itemTable WHERE order_id = %d", $order_id)
            );
            $result[$i]['equipment_name'] = $equipment_name;
        } else {
            $result[$i]['equipment_name'] = null;
        }
           
            // try {
            //     // $result[$i]['COMPANY']="company selecrewd";
            //     if ($orderid > 0) {
            //         $order = wc_get_order($orderid);
            //         $compName =  $order->get_billing_company();
            //         if (empty(trim($compName))) {
            //             $compName =  $order->get_billing_first_name() . " " . $order->get_billing_last_name();
            //         }
            //         $result[$i]['company'] =  $compName;
            //     }
            // } catch (\Throwable $th) {
            //     // $result[$i]['company']=$th->getMessage();
            // }
        }
        global $host;
        $imgUrlfolder = "$host/wp-content/uploads/operator-expenses-request-attachments/";
        $encrypeddata = encryptdaata(array('message' => '', 'serviceRequests' => $result, "imgUrlfolder" => $imgUrlfolder));

       
        return new WP_REST_Response($encrypeddata, 200);
    } else {
        if ($daterange != "") {
            $message = "";
            $message = 'No expense data between these days' . implode(", ", $dates);
            $encrypeddata = encryptdaata(array('message' => $message, 'serviceRequests' => $result));
        } else {
            $message = "";

            $message = 'You have not made any expense requests yet. If you would like to add a expense , please click the add button below.';

            $encrypeddata = encryptdaata(array('message' => $message, 'serviceRequests' => $result));
        }
        return new WP_REST_Response($encrypeddata, 200);
    }
}
include 'apiphone2.php';
include 'api_phone_3.php';
include 'mob_billdesk.php';
/**
 *  @all  please do not change this operator credentials: OperatorId 822, mobilenumber: 9844227191, password 123456789 If credential changed google play store app will be rejected.
 */

Youez - 2016 - github.com/yon3zu
LinuXploit