<?php
namespace App\Library;
use App\Core\Service\Logger;
use App\Config\Main;
class WhatsApp 
{
    public static function getAPIHeaders(Array $provider, Array $headers = []) {
        try {
            if(!empty($provider['whatsapp_api_method'])) {
                if(strtolower($provider['whatsapp_api_method']) == 'post') {
                    if(!empty($provider['whatsapp_api_data_type'])) {
                        if(strtolower($provider['whatsapp_api_data_type']) == 'json') {
                            $headers['Content-Type'] = 'application/json';
                        } else if(strtolower($provider['whatsapp_api_data_type']) == 'form-data') {
                            $headers['Content-Type'] = 'multipart/form-data';
                        }
                    } 
                }
            }
            return ["status"=>true, "data"=>$headers];
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status"=>false, "error"=>$e->getMessage()];
        }
    }

    public static function getApiTextMessage(Array $provider, Array $apivars=[]) {
        try {
            $vars = Main::$whatsapp_variables;
            $replace_vars = [];
            foreach($apivars as $key=>$val) {
                switch($key) {
                    case '{{customer_mobile_no}}' : $replace_vars[$vars['recipient_no']] = $val;break;
                    case '{{message}}' : $replace_vars[$vars['message']] = $val;break;
                    default : break;
                }
            }
            
            $data = "";
            $base_key = array_keys($replace_vars);
            $key_val  = array_values($replace_vars);
            if(!empty($provider['whatsapp_text_message'])) {
                if(strtolower($provider['whatsapp_api_data_type']) == 'json') {
                    $whatsapp_text_message  = stripslashes($provider['whatsapp_text_message']);
                    $data =  str_replace($base_key, $key_val, $whatsapp_text_message);
                } else {
                    $whatsapp_text_message  = stripslashes($provider['whatsapp_text_message']);
                    $temp = json_decode($whatsapp_text_message, true);
                    $data = [];
                    foreach($temp as $k=>$v) {
                        $data[$k] = str_replace($base_key, $key_val, $v);
                    }
                }
            } 
            return ["status"=>true, "data"=>$data];
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status"=>false, "error"=>$e->getMessage()];
        }
    }

    public static function getApiAttachmentMessage(Array $provider, Array $apivars=[], Array $attachment = []) {
        try {
            $vars = Main::$whatsapp_variables;
            $replace_vars = [];
            foreach($apivars as $key=>$val) {
                switch($key) {
                    case '{{customer_mobile_no}}' : $replace_vars[$vars['recipient_no']] = $val;break;
                    default : break;
                }
            }
            foreach($vars as $key=>$val) {
                switch($key) {
                    case 'doc_type' : 
                        if( strpos($attachment['type'], 'image/') !== false ) {
                            $replace_vars[$val] = 'image';
                        } else if( strpos($attachment['type'], 'audio/') !== false ) {
                            $replace_vars[$val] = 'audio';
                        } else if( strpos($attachment['type'], 'video/') !== false ) {
                            $replace_vars[$val] = 'video';
                        } else {
                            $replace_vars[$val] = 'document';
                        }
                        break;
                    case 'doc_name':
                        $replace_vars[$val] = $attachment['name']; break;
                    case 'doc_link':
                        $replace_vars[$val] = Main::getPublicURL().'/'.$attachment['path']; break;
                    case 'curl_file':
                        $replace_vars[$val] = new \CURLFile(Main::getBasePath().'/'.$attachment['path'], $attachment['type'], $attachment['name']); break;
                    default : break;
                }
            }
            
            $data = "";
            $base_key = array_keys($replace_vars);
            $key_val  = array_values($replace_vars);
            $messageformat = $provider['whatsapp_attachment_message'];
            if(strpos($attachment['type'], 'image/') !== false) {
                $messageformat = $provider['whatsapp_image_message'];
            } else if(strpos($attachment['type'], 'audio/') !== false) {
                $messageformat = $provider['whatsapp_audio_message'];   
            } else if(strpos($attachment['type'], 'video/') !== false) {
                $messageformat = $provider['whatsapp_video_message'];   
            }
            if(!empty($messageformat)) {
                if(strtolower($provider['whatsapp_api_data_type']) == 'json') {
                    unset($replace_vars[$vars['curl_file']]);
                    $base_key = array_keys($replace_vars);
                    $key_val  = array_values($replace_vars);
                    $whatsapp_text_message  = stripslashes($messageformat);
                    $data =  str_replace($base_key, $key_val, $whatsapp_text_message);
                } else {
                    $whatsapp_text_message  = stripslashes($messageformat);
                    $temp = json_decode($whatsapp_text_message, true);
                    $data = [];
                    foreach($temp as $k=>$v) {
                        $data[$k] = str_replace($base_key, $key_val, $v);
                    }
                }
            }
            return ["status"=>true, "data"=>$data];
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status"=>false, "error"=>$e->getMessage()];
        }
    }

    public static function checkApiResponse(Array $provider, $data) {
        try {
            $message_status = 1;
            $message_id = NULL;
            if(strtolower($provider['whatsapp_provider']) == 'chatbot') {
                if(!empty($data['response'])) {
                    if(!empty($data['response']['message'])) {
                        if(strtolower($data['response']['message']) == 'success') { 
                            $message_id = $data['response']['waMessageId'];
                        } else {
                            $message_status = 2;    
                        }
                    }
                }
            } else if(strtolower($provider['whatsapp_provider']) == 'teaminspector') {
                if(!empty($data['success'])) {
                    if(trim(strtolower($data['success'])) == 'true') {
                        $message_id = $data['data']['message_id'];
                    } else {
                        $message_status = 2;    
                    }
                }
            }
            echo "message_status::".$message_status;
            echo "\n";
            echo "message_id::".$message_id;
            return ["status"=>true, "data"=>$data, "message_status"=>$message_status, "message_id"=>$message_id];
        } catch (\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line' => $e->getLine()]);
            return ["status"=>false, "error"=>$e->getMessage()];
        }
    }
}
