<?php

/* Check the absolute path to the Social Auto Poster directory. */
if ( !defined( 'SAP_APP_PATH' ) ) {
    // If SAP_APP_PATH constant is not defined, perform some action, show an error, or exit the script
    // Or exit the script if required
    exit();
}

/**
 * Quick Posts Class
 * 
 * Responsible for all function related to Quick posts
 *
 * @package Social Auto Poster
 * @since 1.0.0
 */
require_once(CLASS_PATH . 'Settings.php');

// For chat-GPT message generatation
require_once(SAP_APP_PATH . DS . 'Lib' . DS . 'vendor/autoload.php');
use Orhanerday\OpenAi\OpenAi;

class SAP_Quick_Posts
{

	//Set Database variable
	private $db;
	//Set table name
	private $table_name;
	private $post_meta_table_name;
	private $settings;
	public $flash;
	public $common, $sap_common, $tumblr;


	public function __construct()
	{

		global $sap_db_connect, $sap_common;

		$this->db = $sap_db_connect;
		$this->flash = new Flash();
		$this->common = new Common();
		$this->table_name = 'sap_quick_posts';

		$this->post_meta_table_name = 'sap_quick_postmeta';

		$this->settings = new SAP_Settings();
		$this->sap_common = $sap_common;
	}

	/**
	 * Listing page of Posts
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function index()
	{
		include(SAP_APP_PATH . DS . 'Lib' . DS . 'vendor/autoload.php');
		//Includes Html files for Posts list
		if (sap_current_user_can('quick-post')) {
			if (!class_exists('SAP_Tumblr')) {
				require_once(CLASS_PATH . 'Social' . DS . 'tumblrConfig.php');
			}

			$this->tumblr = new SAP_Tumblr();

			$template_path = $this->common->get_template_path('Quick-Posts' . DS . 'index.php');
			include_once($template_path);
		} else {
			$this->common->redirect('login');
		}
	}

	/**
	 * Save post to database
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function save_post()
	{

		//Check form submit request
		if (isset($_POST['networks'])) {
			
			//Call Upload class and upload media
			$fileUpload = new FileUploader(array());
			$validate_size = 1;
			if (!empty($_FILES['video']['name'])) {
				//$_POST['video'] = $uploadPath;
				if ($_POST['networks']['facebook']) {
					$available_file_size = $_FILES['video']['size'];
					$size_conversion = number_format($available_file_size / 1048576, 2);
					if ($size_conversion <= 1000) {
						$validate_size = 1;
					} else {
						$this->flash->setFlash('Limit for video Size in Facebook Posting is maximum 1GB', 'error');
						$validate_size = 0;
					}
				}

				if ($_POST['networks']['twitter']) {
					$available_file_size = $_FILES['video']['size'];
					$size_conversion = number_format($available_file_size / 1048576, 2);
					if ($size_conversion <= 10) {

						$validate_size = 1;
					} else {
						$this->flash->setFlash('Limit for video size in Twitter Posting is maximum 10MB', 'error');
						$validate_size = 0;
					}
				}

				if ($_POST['networks']['tumblr']) {
					$available_file_size = $_FILES['video']['size'];
					$size_conversion = number_format($available_file_size / 1048576, 2);
					if ($size_conversion <= 17) {

						$validate_size = 1;
					} else {
						$this->flash->setFlash('Limit for video size in Tumblr Posting is maximum 17MB', 'error');
						$validate_size = 0;
					}
				}

				if ($validate_size) {
					$uploadPath = $fileUpload->uploadFile('image');
					$_POST['video'] = $uploadPath;
				}
			} else {
				//Check media uploaded
				$uploadPath = $fileUpload->uploadFile('image');
				if (!is_int($uploadPath) || !is_numeric($uploadPath)) {
					$_POST['image'] = $uploadPath;
					$validate_size = 1;
				}
			}

			$user_id = sap_get_current_user_id();
			$user_options = $this->settings->get_user_setting('sap_general_options', $user_id);
			$timezone = (!empty($user_options['timezone'])) ? $user_options['timezone'] : ''; // user timezone

			//Update time zone based on user setting
			if (!empty($timezone)) { // set default timezone
				date_default_timezone_set($timezone);
			}

			//Check post global time is scheduled
			//Status 2 means whole post set scheduled
			if (!empty($_POST['sap-schedule-time']) && strtotime($_POST['sap-schedule-time']) > strtotime(date('Y-m-d H:i:s'))) {
				$_POST['status'] = 2;
			} else {

				// Check individual post set scheduled
				if ((!empty($_POST['sap-schedule-time-fb']) && strtotime($_POST['sap-schedule-time-fb']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-blogger']) && strtotime($_POST['sap-schedule-time-blogger']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-tw']) && strtotime($_POST['sap-schedule-time-tw']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-li']) && strtotime($_POST['sap-schedule-time-li']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-tumblr']) && strtotime($_POST['sap-schedule-time-tumblr']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-pin']) && strtotime($_POST['sap-schedule-time-pin']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-gmb']) && strtotime($_POST['sap-schedule-time-gmb']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-instagram']) && strtotime($_POST['sap-schedule-time-instagram']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-threads']) && strtotime($_POST['sap-schedule-time-threads']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-reddit']) && strtotime($_POST['sap-schedule-time-reddit']) > strtotime(date('Y-m-d H:i:s'))) || 
					(!empty($_POST['sap-schedule-time-wordpress']) && strtotime($_POST['sap-schedule-time-wordpress']) > strtotime(date('Y-m-d H:i:s'))) 
				) {
					$_POST['status'] = 2;
				}

				// check individual time and global time both empty but toggle is on then instant
				if ((empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-fb']) && $_POST['networks']['facebook']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-blogger']) && $_POST['networks']['blogger']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-tw']) && $_POST['networks']['twitter']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-li']) && $_POST['networks']['linkedin']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-tumblr']) && $_POST['networks']['tumblr']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-pin']) && $_POST['networks']['pinterest']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-gmb']) && $_POST['networks']['gmb']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-instagram']) && $_POST['networks']['instagram']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-threads']) && $_POST['networks']['threads']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-reddit']) && $_POST['networks']['reddit']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-wordpress']) && $_POST['networks']['wordpress']) 
				) {
					$_POST['individual_status'] = 1;
				}
			}

			$_POST['ip'] = $this->common->get_user_ip();
			if ($_POST['sap-active-tab'] == 'sap-custom-tab') {
				$_POST['message'] = $_POST['custom-message'];
				$_POST['share_link'] = $_POST['custom_share_link'];
			} else {
				$_POST['message'] = $_POST['ai-message'];
				$_POST['share_link'] = $_POST['ai_share_link'];
			}
			$_POST['message'] = !empty($_POST['message']) ? $this->db->filter($_POST['message']) : '';
			$_POST['message'] = !empty($_POST['message']) ? $_POST['message'] : '';
			$_POST['created_date'] = date('Y-m-d H:i:s');

			// get current user id
			$user_id = sap_get_current_user_id();

			//Prepare data for store post in DB
			$prepare_data = array(
				'message'		=> $_POST['message'],
				'user_id'		=> $user_id,
				'image'			=> $_POST['image'],
				'video'         => $_POST['video'],
				'ip_address'	=> $_POST['ip'],
				'status'		=> isset($_POST['status']) ? $_POST['status'] : 0,
				'created_date'	=> $_POST['created_date'],
			);

			if (isset($_POST['share_link'])) {
				$prepare_data['share_link'] = $_POST['share_link'];
			}

			
			$prepare_data = $this->db->escape($prepare_data);

			if ($this->db->insert($this->table_name, $prepare_data)) {

				$_POST['id'] = $this->db->lastid();

				// update meta value for the post
				$this->save_post_meta();

				//Check Post Published Or Draft
				$uploads_folder      =  SAP_APP_PATH . 'uploads/';
				$is_uploads_writable =  is_writable($uploads_folder);


				if (!$is_uploads_writable) {
					$this->sap_common->sap_script_logs('Please provide the write permission to the directory ( ' . $uploads_folder . ' )');
					$this->flash->setFlash('Please provide the write permission to the directory ( ' . $uploads_folder . ' )', 'error');
				} else {

					//instant post for whose not have individual time and global time is also not set 
					if (isset($_POST['individual_status']) && $_POST['status'] != 1 && $validate_size) {
						$this->sap_manage_wall_social_post($_POST['id'], $_POST['individual_status'], $user_id);
					}
					if (isset($_POST['status']) && $validate_size) {
						$this->sap_manage_wall_social_post($_POST['id'], $_POST['status'], $user_id);
					}
				}



				header("Location:" . SAP_SITE_URL . "/quick-post/");
				exit;
			} else {
				$this->flash->setFlash('There was error while saving data', 'error');
			}
		}
	}

	/**
	 * View Posts
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function view_post()
	{

		if (isset($_SESSION['user_details']) && !empty($_SESSION['user_details'])) {
			if (!class_exists('SAP_Tumblr')) {
				require_once(CLASS_PATH . 'Social' . DS . 'tumblrConfig.php');
			}

			$tumblr = new SAP_Tumblr();

			$template_path = $this->common->get_template_path('Quick-Posts' . DS . 'edit.php');
			include_once($template_path);
		} else {
			$this->common->redirect('login');
		}
	}

	/**
	 * Update Quick Post
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function update_post($prepare_data = array(), $where_data = array())
	{

		if (isset($_POST['quick-form-updated'])) {

			$post_id = $_POST['id'];

			//Call Upload class and upload media
			$fileUpload = new FileUploader(array());
			$validate_size = 1;
			if (!empty($_FILES['video']['name'])) {
				//$_POST['video'] = $uploadPath;
				if ($_POST['networks']['facebook']) {
					$available_file_size = $_FILES['video']['size'];
					$size_conversion = number_format($available_file_size / 1048576, 2);
					if ($size_conversion <= 1000) {
						$validate_size = 1;
					} else {
						$this->flash->setFlash('Limit for video Size in Facebook Posting is maximum 1GB', 'error');
						$validate_size = 0;
					}
				}

				if ($_POST['networks']['twitter']) {
					$available_file_size = $_FILES['video']['size'];
					$size_conversion = number_format($available_file_size / 1048576, 2);
					if ($size_conversion <= 10) {

						$validate_size = 1;
					} else {
						$this->flash->setFlash('Limit for video size in Twitter Posting is maximum 10MB', 'error');
						$validate_size = 0;
					}
				}

				if ($_POST['networks']['tumblr']) {
					$available_file_size = $_FILES['video']['size'];
					$size_conversion = number_format($available_file_size / 1048576, 2);
					if ($size_conversion <= 17) {

						$validate_size = 1;
					} else {
						$this->flash->setFlash('Limit for video size in Tumblr Posting is maximum 17MB', 'error');
						$validate_size = 0;
					}
				}

				if ($validate_size) {
					$uploadPath = $fileUpload->uploadFile('image');
					$_POST['video'] = $uploadPath;
				}
			} else {
				//Check media uploaded
				$uploadPath = $fileUpload->uploadFile('image');
				if (!is_int($uploadPath) || !is_numeric($uploadPath)) {
					$_POST['image'] = $uploadPath;
					$validate_size = 1;
				} else {
					$_POST['image'] = '';
				}
			}


			$user_id = sap_get_current_user_id();
			$user_options = $this->settings->get_user_setting('sap_general_options', $user_id);
			$timezone = (!empty($user_options['timezone'])) ? $user_options['timezone'] : ''; // user timezone

			//Update time zone based on user setting
			if (!empty($timezone)) { // set default timezone
				date_default_timezone_set($timezone);
			}

			//Check post set scheduled
			if (!empty($_POST['sap-schedule-time']) && strtotime($_POST['sap-schedule-time']) > strtotime(date('Y-m-d H:i:s'))) {
				$_POST['status'] = 2;
			} else {

				// Check individual post set scheduled
				if ((!empty($_POST['sap-schedule-time-fb']) && strtotime($_POST['sap-schedule-time-fb']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-blogger']) && strtotime($_POST['sap-schedule-time-blogger']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-tw']) && strtotime($_POST['sap-schedule-time-tw']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-li']) && strtotime($_POST['sap-schedule-time-li']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-tumblr']) && strtotime($_POST['sap-schedule-time-tumblr']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-pin']) && strtotime($_POST['sap-schedule-time-pin']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-gmb']) && strtotime($_POST['sap-schedule-time-gmb']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-instagram']) && strtotime($_POST['sap-schedule-time-instagram']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-threads']) && strtotime($_POST['sap-schedule-time-threads']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-reddit']) && strtotime($_POST['sap-schedule-time-reddit']) > strtotime(date('Y-m-d H:i:s'))) ||
					(!empty($_POST['sap-schedule-time-wordpress']) && strtotime($_POST['sap-schedule-time-wordpress']) > strtotime(date('Y-m-d H:i:s')))
				) {
					$_POST['status'] = 2;
				}

				// check individual time and global time both empty but toggle is on then instant
				if ((empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-fb']) && $_POST['networks']['facebook']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-blogger']) && $_POST['networks']['blogger']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-tw']) && $_POST['networks']['twitter']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-li']) && $_POST['networks']['linkedin']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-tumblr']) && $_POST['networks']['tumblr']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-pin']) && $_POST['networks']['pinterest']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-gmb']) && $_POST['networks']['gmb']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-instagram']) && $_POST['networks']['instagram']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-threads']) && $_POST['networks']['threads']) ||
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-reddit']) && $_POST['networks']['reddit']) || 
					(empty($_POST['sap-schedule-time']) && empty($_POST['sap-schedule-time-wordpress']) && $_POST['networks']['wordpress']) 
				) {
					$_POST['individual_status'] = 1;
				}
			}


			$_POST['ip'] = $this->common->get_user_ip();
			if ($_POST['sap-active-tab'] == 'sap-custom-tab') {
				$_POST['message'] = $_POST['custom-message'];
				$_POST['share_link'] = $_POST['custom_share_link'];
			} else {
				$_POST['message'] = $_POST['ai-message'];
				$_POST['share_link'] = $_POST['ai_share_link'];
			}
			$_POST['message'] = !empty($_POST['message']) ? $this->db->filter($_POST['message']) : '';
			$_POST['message'] = !empty($_POST['message']) ? $_POST['message'] : '';
			$_POST['modified_date'] = date('Y-m-d H:i:s');

			// get current user id
			$user_id = sap_get_current_user_id();

			
			//Prepare data for store post in DB
			$prepare_data = array(
				'message'		=> $_POST['message'],
				'user_id'		=> $user_id,
				'image'			=> $_POST['image'],
				'video'         => $_POST['video'],
				'ip_address'	=> $_POST['ip'],
				'status'		=> isset($_POST['status']) ? $_POST['status'] : 0,
				'modified_date'	=> $_POST['modified_date'],
			);

			if (isset($_POST['share_link'])) {
				$prepare_data['share_link'] = $_POST['share_link'];
			}

			$prepare_data = $this->db->escape($prepare_data);

			if ($this->db->update($this->table_name, $prepare_data, array('post_id' => $post_id))) {

				// update meta value for the post
				$this->save_post_meta();

				//Check Post Published Or Draft
				$uploads_folder      =  SAP_APP_PATH . 'uploads/';
				$is_uploads_writable =  is_writable($uploads_folder);


				if (!$is_uploads_writable) {
					$this->sap_common->sap_script_logs('Please provide the write permission to the directory ( ' . $uploads_folder . ' )');
					$this->flash->setFlash('Please provide the write permission to the directory ( ' . $uploads_folder . ' )', 'error');
				} else {

					if (isset($_POST['individual_status']) && $_POST['status'] != 1 && $validate_size) {
						$this->sap_manage_wall_social_post($_POST['id'], $_POST['individual_status'], $user_id);
					}

					if (isset($_POST['status']) && $validate_size) {
						$this->sap_manage_wall_social_post($_POST['id'], $_POST['status'], $user_id);
					}
				}

				$this->flash->setFlash('Quick post updated successfully', 'success');
				header("Location:" . SAP_SITE_URL . "/quick-post/view/" . $post_id);
				exit;
			} else {
				$this->flash->setFlash('There was error while updating data', 'error');
			}
		}

		if (!empty($prepare_data) && !empty($where_data)) {
			//Run update query in db and return result
			return $this->db->update($this->table_name, $prepare_data, $where_data);
		}
	}

	/**
	 * Delete Posts
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function delete_post()
	{

		if (!empty($_REQUEST['post_id'])) {

			$result 	= array();
			$post_id 	= $_REQUEST['post_id'];
			$conditions = array('post_id' => $post_id);
			$result = $this->db->get_results("SELECT * FROM " . $this->table_name . " where `post_id` = " . $post_id);

			$img = $result[0]->image;

			if ($img == '0') {
				$img_path = '';
			} else {
				$img_path = SAP_APP_PATH . 'uploads/' . $img;
			}

			$video = $result[0]->video;

			if (!empty($video) || $video != '') {
				$video_path =	SAP_APP_PATH . 'uploads/' . $video;
			} else {
				$video_path = '';
			}

			$is_deleted = $this->db->delete($this->table_name, $conditions);
			$this->db->delete($this->post_meta_table_name, $conditions);

			if ($is_deleted) {
				$result = array('status' => '1');
				unlink($img_path);
				unlink($video_path);
			} else {
				$result = array('status' => '0');
			}

			echo json_encode($result);

			die;
		}
	}

	/**
	 * Delete Multiple posts
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function delete_multiple_post()
	{

		if (!empty($_REQUEST['id'])) {
			$result = array();
			$post_id = $_REQUEST['id'];
			foreach ($post_id as $key => $value) {
				$conditions = array('post_id' => $value);
				$is_deleted = $this->db->delete($this->table_name, $conditions);
				$this->db->delete($this->post_meta_table_name, $conditions);
			}
			if ($is_deleted) {
				$url = SAP_SITE_URL . "/quick-post/";
				$result = array('status' => '1', "redirect_url" => $url);
				$this->flash->setFlash('Selected posts has been deleted', 'success');
			} else {
				$result = array('status' => '0');
			}
			echo json_encode($result);
			die;
		}
	}

	/**
	 * Get post settings
	 * 
	 * Handels list setting Option get
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function get_post($post_id, $object)
	{

		$result = array();
		if (isset($post_id) && !empty($post_id)) {
			try {
				$result = $this->db->get_row("SELECT * FROM " . $this->table_name . " where `post_id` = '{$post_id}'", $object);
			} catch (Exception $e) {
				return $e->getMessage();
			}
			//Return result
			return $result;
		}
	}

	/**
	 * Get all posts
	 * 
	 * Handels post listing
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function get_posts()
	{
		$result = array();
		try {
			$user_id = sap_get_current_user_id();
			$result = $this->db->get_results("SELECT * FROM " . $this->table_name . " WHERE `user_id` = {$user_id} ORDER BY `created_date` DESC");
		} catch (Exception $e) {
			return $e->getMessage();
		}

		//Return result
		return $result;
	}

	/**
	 * Get all posts
	 * 
	 * Handels post listing
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function get_posts_by_status($status)
	{
		$result = array();
		try {
			$user_id = sap_get_current_user_id();
			$result = $this->db->get_results("SELECT * FROM " . $this->table_name . " where `status` = '{$status}' AND `user_id` = {$user_id} ORDER BY `created_date` DESC");
		} catch (Exception $e) {
			return $e->getMessage();
		}

		//Return result
		return $result;
	}

	/**
	 * Update option settings
	 * 
	 * Handels to Update post meta
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function update_post_meta($post_id, $meta_key, $meta_value)
	{

		if (!empty($post_id) && !empty($meta_key)) {

			//Check option exist in Database
			$check_postmeta_exist = $this->db->num_rows("SELECT * FROM " . $this->post_meta_table_name . " WHERE post_id = '{$post_id}' AND meta_key = '{$meta_key}' ");

			//Exist database set update query another insert option
			if ($check_postmeta_exist) {

				//Prepare data for update
				$post_meta_data = array('post_id' => $post_id, 'meta_key' => $meta_key, 'meta_value' => is_array($meta_value) ? serialize($meta_value) : $this->db->filter($meta_value));
				$where_data = array('post_id' => $post_id, 'meta_key' => $meta_key);

				//Run update query in db and return result
				return $this->db->update($this->post_meta_table_name, $post_meta_data, $where_data);
			} else {

				//Prepare data for insert
				$post_meta_data = array('post_id' => $post_id, 'meta_key' => $meta_key, 'meta_value' => is_array($meta_value) ? serialize($meta_value) : $this->db->filter($meta_value));

				//Run query and insert option in db
				$this->db->insert($this->post_meta_table_name, $post_meta_data);

				//Return inserted ID
				return $this->db->lastid();
			}
		}
	}

	/**
	 * Delete option settings
	 * 
	 * Handels to delete post meta
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function delete_post_meta($post_id, $meta_key)
	{

		if (!empty($post_id) && !empty($meta_key)) {
			$post_meta_data = array('post_id' => $post_id, 'meta_key' => $meta_key);
			//Run database and Insert options in table
			$result = $this->db->delete($this->post_meta_table_name, $post_meta_data);

			//Return result
			return $result;
		}
	}

	/**
	 * Update option settings
	 * 
	 * Handels to get post meta
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function get_post_meta($post_id, $meta_key)
	{

		if (!empty($post_id) && !empty($meta_key)) {
			//Check option exist in Database
			$postmeta_data = $this->db->get_row("SELECT * FROM " . $this->post_meta_table_name . " WHERE post_id = '{$post_id}' AND meta_key = '{$meta_key}' ");

			if (isset($postmeta_data[3]) && $this->common->is_serialized($postmeta_data[3])) {
				$result = unserialize($postmeta_data[3]);
			} elseif (isset($postmeta_data[3]) && is_string($postmeta_data[3])) {
				$result = $postmeta_data[3];
			} else {
				$result = '';
			}
			return $result;
		}
	}

	/**
	 * Reset option settings
	 * 
	 * Handels to reset post status
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function reset_post_status()
	{

		if (!empty($_REQUEST['post_id']) && !empty($_REQUEST['meta_key'])) {

			$result = array();
			$post_id = $_REQUEST['post_id'];
			$meta_key = $_REQUEST['meta_key'];

			$is_deleted = $this->delete_post_meta($post_id, $meta_key);
			if ($is_deleted) {
				$result = array('status' => '1');
			} else {
				$result = array('status' => '0');
			}
			echo json_encode($result);
			die;
		}
	}

	/**
	 * Saving post meta 
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function save_post_meta()
	{

		//Preapare Data global time 
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time', strtotime($_POST['sap-schedule-time']));
		}

		//Preapare Data individual facebook time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-fb'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_fb', strtotime($_POST['sap-schedule-time-fb']));
		}
		//Preapare Data individual blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-blogger'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_blogger', strtotime($_POST['sap-schedule-time-blogger']));
		}
		//Preapare Data twitter blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-tw'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_tw', strtotime($_POST['sap-schedule-time-tw']));
		}
		//Preapare Data linkedin blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-li'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_li', strtotime($_POST['sap-schedule-time-li']));
		}
		//Preapare Data tumblr blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-tumblr'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_tumblr', strtotime($_POST['sap-schedule-time-tumblr']));
		}
		//Preapare Data pinterest blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-pin'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_pin', strtotime($_POST['sap-schedule-time-pin']));
		}
		//Preapare Data gmb blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-gmb'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_gmb', strtotime($_POST['sap-schedule-time-gmb']));
		}
		//Preapare Data instagram blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-instagram'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_instagram', strtotime($_POST['sap-schedule-time-instagram']));
		}
		//Preapare Data threads blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-threads'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_threads', strtotime($_POST['sap-schedule-time-threads']));
		}
		//Preapare Data reddit blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-reddit'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_reddit', strtotime($_POST['sap-schedule-time-reddit']));
		}

		if (!empty($_POST['networks'])) {
			$this->update_post_meta($_POST['id'], 'sap_networks', $_POST['networks']);
		}
		if (!empty($_POST['sap_caption_words'])) {
			$this->update_post_meta($_POST['id'], 'sap_caption_words', $_POST['sap_caption_words']);
		}
		//Preapare Data reddit blogger time
		if (!empty($_POST['status']) && $_POST['status'] == 2 && !empty($_POST['sap-schedule-time-wordpress'])) {
			$this->update_post_meta($_POST['id'], 'sap_schedule_time_wordpress', strtotime($_POST['sap-schedule-time-wordpress']));
		}
	}

	/**
	 * Handle all Socail posts
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function sap_manage_wall_social_post($post_id, $scheduled = false, $user_id = '', $individual_post = '')
	{

		// If current user then take accesible networks from session
		$networks = sap_get_users_networks_by_id($user_id);
		$networks = unserialize($networks->networks);
		$networks = !empty($networks) ? $networks : array();
		//Get general options of Facebook;
		$sap_facebook_options = array();



		if (in_array('facebook', $networks)) {
			$sap_facebook_options = $this->settings->get_user_setting('sap_facebook_options', $user_id);
			$sap_facebook_options = !empty($sap_facebook_options) ? $sap_facebook_options : array();
		}

		//Get general options of Twiiter;
		$sap_twitter_options = array();
		if (in_array('twitter', $networks)) {
			$sap_twitter_options = $this->settings->get_user_setting('sap_twitter_options', $user_id);
			$sap_twitter_options = !empty($sap_twitter_options) ? $sap_twitter_options : array();
		}

		//Get general options of linkedin;
		$sap_linkedin_options = array();
		if (in_array('linkedin', $networks)) {
			$sap_linkedin_options = $this->settings->get_user_setting('sap_linkedin_options', $user_id);
			$sap_linkedin_options = !empty($sap_linkedin_options) ? $sap_linkedin_options : array();
		}

		//Get general options of Tumblr;
		$sap_tumblr_options = array();
		if (in_array('tumblr', $networks)) {
			$sap_tumblr_options = $this->settings->get_user_setting('sap_tumblr_options', $user_id);
			$sap_tumblr_options = !empty($sap_tumblr_options) ? $sap_tumblr_options : array();
		}

		//Get general options of Pinterest
		$sap_pinterest_options = array();
		if (in_array('pinterest', $networks)) {
			$sap_pinterest_options = $this->settings->get_user_setting('sap_pinterest_options', $user_id);
			$sap_pinterest_options = !empty($sap_pinterest_options) ? $sap_pinterest_options : array();
		}

		$sap_gmb_options = array();
		if (in_array('gmb', $networks)) {
			$sap_gmb_options = $this->settings->get_user_setting('sap_google_business_options', $user_id);
			$sap_gmb_options = !empty($sap_gmb_options) ? $sap_gmb_options : array();
		}


		$sap_instagram_options = array();
		if (in_array('instagram', $networks)) {
			$sap_instagram_options = $this->settings->get_user_setting('sap_fb_sess_data_for_insta', $user_id);
			$sap_instagram_options = !empty($sap_instagram_options) ? $sap_instagram_options  : array();
		}

		$sap_threads_options = array();
		if (in_array('threads', $networks)) {
			$sap_threads_options = $this->settings->get_user_setting('sap_fb_sess_data_for_threads', $user_id);
			$sap_threads_options = !empty($sap_threads_options) ? $sap_threads_options  : array();
		}

		$sap_reddit_options = array();
		if (in_array('reddit', $networks)) {
			$sap_reddit_options = $this->settings->get_user_setting('sap_reddit_sess_data', $user_id);
			$sap_reddit_options = !empty($sap_reddit_options) ? $sap_reddit_options  : array();
		}


		$sap_blogger_options = array();
		if (in_array('blogger', $networks)) {
			$sap_blogger_options = $this->settings->get_user_setting('sap_blogger_sess_data', $user_id);
			$sap_blogger_options = !empty($sap_blogger_options) ? $sap_blogger_options  : array();
		}

		$sap_wordpress_options = array();
		if (in_array('wordpress', $networks)) {
			$sap_wordpress_options = $this->settings->get_user_setting('sap_blogger_wordpress_data', $user_id);
			$sap_wordpress_options = !empty($sap_wordpress_options) ? $sap_wordpress_options  : array();
		}



		//Check post first time inserting or updating...
		$sap_networks_meta = $this->get_post_meta($post_id, 'sap_networks');
		$schedule_time_fb = $this->get_post_meta($post_id, 'sap_schedule_time_fb');
		$fb_status = $this->get_post_meta($post_id, 'fb_status');
		

		//Check facebook enable
		if (!empty($sap_networks_meta['facebook'])) {
			// if facebook is enable and sap_fb_status is empty or 2 then go inside if condition
			if ($fb_status != '1' && $fb_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {
					$this->update_post_meta($post_id, 'fb_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_facebook'), 'success');
				} else {

					// if individual schedule time is not set and individual_post  parameter is false then post with global time
					// if individual schedule time is set and individual_post parameter is fb given then post with individual time
					if ((empty($schedule_time_fb) && $individual_post == false) || $individual_post == 'fb') {

						if (!class_exists('SAP_Facebook')) {
							require_once(CLASS_PATH . 'Social' . DS . 'fbConfig.php');
						}

						$facebook = new SAP_Facebook($user_id);

						$fb_result = $facebook->sap_quick_post_on_fb_post($post_id);

						if (!empty($fb_result)) {
							$this->update_post_meta($post_id, 'fb_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, 'fb_status', '3');
						}
					}
				}
			}
		}
		$wordpress_status = $this->get_post_meta($post_id, 'wordpress_status');
		$sap_schedule_time_wordpress = $this->get_post_meta($post_id, 'sap_schedule_time_wordpress');
		//Check wordpress enable
		if (!empty($sap_networks_meta['wordpress'])) {
			// if wordpress is enable and sap_fb_status is empty or 2 then go inside if condition
			if ($wordpress_status != '1' && $wordpress_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {
					$this->update_post_meta($post_id, 'wordpress_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_wordpress'), 'success');
				} else {

					// if individual schedule time is not set and individual_post  parameter is false then post with global time
					// if individual schedule time is set and individual_post parameter is fb given then post with individual time
					if ((empty($sap_schedule_time_wordpress) && $individual_post == false) || $individual_post == 'wordpress') {
						
						if (!class_exists('SAP_Wordpress_Config')) {
							require_once(CLASS_PATH . 'Social' . DS . 'wordpressConfig.php');
						}

						$wordpress_config = new SAP_Wordpress_Config($user_id);

						$wordpress_result = $wordpress_config->sap_quick_post_on_wordpress_post($post_id);

						if (!empty($wordpress_result)) {
							$this->update_post_meta($post_id, 'wordpress_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, 'wordpress_status', '3');
						}
					}
				}
			}
		}


		$schedule_time_twitter = $this->get_post_meta($post_id, 'sap_schedule_time_tw');
		$twitter_status = $this->get_post_meta($post_id, '_sap_tw_status');
		//Check twitter enable
		if (!empty($sap_networks_meta['twitter'])) {
			if ($twitter_status != '1' && $twitter_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {
					$this->update_post_meta($post_id, '_sap_tw_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_twitter'), 'success');
				} else {
					if ((empty($schedule_time_twitter) && $individual_post == false) || $individual_post == 'twitter') {
						//Upload custom image if exist
						if (!class_exists('SAP_Twitter')) {
							require_once(CLASS_PATH . 'Social' . DS . 'twitterConfig.php');
						}

						$this->twposting = new SAP_Twitter($user_id);
						$tw_result = $this->twposting->sap_quick_post_to_twitter($post_id);

						if (!empty($tw_result)) {
							$this->update_post_meta($post_id, '_sap_tw_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_tw_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_linkedin = $this->get_post_meta($post_id, 'sap_schedule_time_li');
		$linkedin_status = $this->get_post_meta($post_id, '_sap_li_status');
		if (!empty($sap_networks_meta['linkedin'])) {
			if ($linkedin_status != '1' && $linkedin_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {
					$this->update_post_meta($post_id, '_sap_li_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_li'), 'success');
				} else {
					if ((empty($schedule_time_linkedin) && $individual_post == false) || $individual_post == 'linkedin') {
						if (!class_exists('SAP_Linkedin')) {
							require_once(CLASS_PATH . 'Social' . DS . 'liConfig.php');
						}

						$linkedin = new SAP_Linkedin($user_id);

						$li_result = $linkedin->sap_quick_post_to_linkedin($post_id);

						if (!empty($li_result['success'])) {
							$this->update_post_meta($post_id, '_sap_li_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_li_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_youtube = $this->get_post_meta($post_id, 'sap_schedule_time_yt');
		$youtube_status = $this->get_post_meta($post_id, '_sap_yt_status');
		if (!empty($sap_networks_meta['youtube'])) {
			if ($youtube_status != '1' && $youtube_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {
					$this->update_post_meta($post_id, '_sap_yt_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_yt'), 'success');
				} else {
					if ((empty($schedule_time_youtube) && $individual_post == false) || $individual_post == 'youtube') {
						if (!class_exists('SAP_Youtube')) {
							require_once(CLASS_PATH . 'Social' . DS . 'youtubeConfig.php');
						}

						$youtube = new SAP_Youtube($user_id);

						$yt_result = $youtube->sap_quick_post_to_youtube($post_id);

						if (!empty($yt_result)) {
							$this->update_post_meta($post_id, '_sap_yt_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_yt_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_tumblr = $this->get_post_meta($post_id, 'sap_schedule_time_tumblr');
		$tumblr_status = $this->get_post_meta($post_id, '_sap_tumblr_status');
		//Check Tumblr enable
		if (!empty($sap_networks_meta['tumblr'])) {
			if ($tumblr_status != '1' && $tumblr_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {
					$this->update_post_meta($post_id, '_sap_tumblr_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_tumb'), 'success');
				} else {
					if ((empty($schedule_time_tumblr) && $individual_post == false) || $individual_post == 'tumblr') {

						if (!class_exists('SAP_Tumblr')) {
							require_once(CLASS_PATH . 'Social' . DS . 'tumblrConfig.php');
						}
						$tumblr = new SAP_Tumblr($user_id);

						$tm_result = $tumblr->sap_quick_post_to_tumblr($post_id);
						if ((isset($tm_result) && $tm_result['status'] == 'published') || ($tm_result['status'] == 'transcoding' && $tm_result['posting_type'] == 'video')) {
							$this->update_post_meta($post_id, '_sap_tumblr_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_tumblr_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_gmb = $this->get_post_meta($post_id, 'sap_schedule_time_gmb');
		$gmb_status = $this->get_post_meta($post_id, '_sap_gmb_status');
		if (!empty($sap_networks_meta['gmb'])) {
			if ($gmb_status != '1' && $gmb_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {

					$this->update_post_meta($post_id, '_sap_gmb_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_gmb'), 'success');
				} else {
					if ((empty($schedule_time_gmb) && $individual_post == false) || $individual_post == 'gmb') {
						if (!class_exists('SAP_Gmb')) {
							require_once(CLASS_PATH . 'Social' . DS . 'gmbConfig.php');
						}
						$google_business = new SAP_Gmb($user_id);

						$gmb_result = $google_business->sap_send_quick_post_to_gmb($post_id);

						if (isset($gmb_result) && $gmb_result['success'] == '1') {

							$this->update_post_meta($post_id, '_sap_gmb_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_gmb_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_instagram = $this->get_post_meta($post_id, 'sap_schedule_time_instagram');
		$instagram_status = $this->get_post_meta($post_id, '_sap_instagram_status');
		//Instagram Business Posting - Logic
		if (!empty($sap_networks_meta['instagram'])) {
			if ($instagram_status != '1' && $instagram_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {

					$this->update_post_meta($post_id, '_sap_instagram_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_instagram'), 'success');
				} else {
					if ((empty($schedule_time_instagram) && $individual_post == false) || $individual_post == 'instagram') {
						if (!class_exists('SAP_Instagram')) {
							require_once(CLASS_PATH . 'Social' . DS . 'instaConfig.php');
						}
						$instagram = new SAP_Instagram($user_id);

						$instagram_result = $instagram->sap_quick_post_on_insta_post($post_id);
						if (isset($instagram_result) && $instagram_result) {

							$this->update_post_meta($post_id, '_sap_instagram_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_instagram_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_threads = $this->get_post_meta($post_id, 'sap_schedule_time_threads');
		$threads_status = $this->get_post_meta($post_id, '_sap_threads_status');
		//Threads Business Posting - Logic
		if (!empty($sap_networks_meta['threads'])) {
			if ($threads_status != '1' && $threads_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {

					$this->update_post_meta($post_id, '_sap_threads_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_threads'), 'success');
				} else {
					if ((empty($schedule_time_threads) && $individual_post == false) || $individual_post == 'threads') {
						if (!class_exists('SAP_Threads')) {
							require_once(CLASS_PATH . 'Social' . DS . 'threadsConfig.php');
						}
						$threads = new SAP_Threads($user_id);

						$threads_result = $threads->sap_quick_post_on_threads_post($post_id);
						if (isset($threads_result) && $threads_result) {

							$this->update_post_meta($post_id, '_sap_threads_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_threads_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_reddit = $this->get_post_meta($post_id, 'sap_schedule_time_reddit');
		$reddit_status = $this->get_post_meta($post_id, '_sap_reddit_status');
		//Reddit Quick Posting - Logic
		if (!empty($sap_networks_meta['reddit'])) {
				
			if ($reddit_status != '1' && $reddit_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {

					$this->update_post_meta($post_id, '_sap_reddit_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_reddit'), 'success');
				} else {
					if ((empty($schedule_time_reddit) && $individual_post == false) || $individual_post == 'reddit') {

						if (!class_exists('SAP_Reddit')) {
							require_once(CLASS_PATH . 'Social' . DS . 'redditConfig.php');
						}

						$reddit = new SAP_Reddit($user_id);
						
						$reddit_result = $reddit->sap_quick_post_on_reddit_post($post_id);


						if (isset($reddit_result) && $reddit_result) {

							$this->update_post_meta($post_id, '_sap_reddit_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_reddit_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_blogger = $this->get_post_meta($post_id, 'sap_schedule_time_blogger');
		$_sap_blogger_status = $this->get_post_meta($post_id, '_sap_blogger_status');

		//Blogger Quick Posting - Logic
		if (!empty($sap_networks_meta['blogger'])) {
			if ($_sap_blogger_status != '1' && $_sap_blogger_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {

					$this->update_post_meta($post_id, '_sap_blogger_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_blogger'), 'success');
				} else {
					if ((empty($schedule_time_blogger) && $individual_post == false) || $individual_post == 'blogger') {
						if (!class_exists('SAP_Blogger')) {
							require_once(CLASS_PATH . 'Social' . DS . 'bloggerConfig.php');
						}

						$blogger = new SAP_Blogger($user_id);
						$blogger_result = $blogger->sap_quick_post_on_blogger_post($post_id);

						if (!empty($blogger_result)) {
							$this->update_post_meta($post_id, '_sap_blogger_status', '1');
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, '_sap_blogger_status', '3');
						}
					}
				}
			}
		}

		$schedule_time_pinterest = $this->get_post_meta($post_id, 'sap_schedule_time_pin');
		$pinterest_status = $this->get_post_meta($post_id, 'pin_status');
		//Check pinterest enable
		if (!empty($sap_networks_meta['pinterest'])) {
			if ($pinterest_status != '1' && $pinterest_status != '3') {
				//Check schedule enable
				if (!empty($_POST['status']) && $_POST['status'] == 2 && $scheduled == 2) {
					$this->update_post_meta($post_id, 'pin_status', 2);
					$this->flash->setFlash($this->sap_common->lang('quick_post_pit'), 'success');
				} else {
					if ((empty($schedule_time_pinterest) && $individual_post == false) || $individual_post == 'pinterest') {

						if (!class_exists('SAP_Pinterest')) {
							require_once(CLASS_PATH . 'Social' . DS . 'pinConfig.php');
						}

						$pinterest = new SAP_Pinterest($user_id);

						$pin_result = $pinterest->sap_quick_post_on_pin_post($post_id);

						if (!empty($pin_result)) {
							$this->update_post_meta($post_id, 'pin_status', '1');
							if (empty($scheduled)) {
								$this->flash->setFlash($this->sap_common->lang('quick_post_publish_pit'), 'success');
							}
						} else {
							// '3' for tried to published when schedule time occur but error occur  
							$this->update_post_meta($post_id, 'pin_status', '3');
						}
					}
				}
			}
		}
	}

	/**
	 * Short the Content As Per Character Limit
	 * 
	 * Handles to return short content as per character 
	 * limit
	 * 
	 * @package Social Auto Poster
	 * */
	public function sap_limit_character($content, $charlength = 140)
	{

		$excerpt = '';
		$charlength++;

		//check content length is greater then character length
		if (strlen($content) > $charlength) {

			$subex = substr($content, 0, $charlength - 5);
			$exwords = explode(' ', $subex);
			$excut = - (strlen($exwords[count($exwords) - 1]));

			if ($excut < 0) {
				$excerpt = substr($subex, 0, $excut);
			} else {
				$excerpt = $subex;
			}
		} else {
			$excerpt = $content;
		}

		//return short content
		return $excerpt;
	}


	/**
	 * get all supported Social Networks
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function sap_get_supported_networks()
	{
		return array(
			'fb' => 'facebook',
			'tw' => 'twitter',
			'li' => 'linkedin',
			'tumblr' => 'tumblr',
			'pin' => 'pinterest',
			'gmb' => 'google my business',
			'instagram' => 'instagram',
			'threads' => 'threads',
			'reddit' => 'reddit',
			'blogger' => 'blogger'
		);
	}

	/**
	 * Ajax call for generate caption
	 * 
	 * @package Social Auto Poster
	 * @since 1.0.0
	 */
	public function sap_generate_caption()
	{

		$number_of_words = $_POST['number_of_words'];
		$link = $_POST['sap_ai_content_link'];

		$prompt = 'Read this article and Give me an exciting ' . $number_of_words . ' word social media caption for this article:' . $link;
		$api_key = $this->settings->get_options('sap_chatgpt_api_key');
		$open_ai = new OpenAi($api_key);
		$result = $open_ai->chatcompletions(array(
			'model' => 'gpt-3.5-turbo',
			'messages' => array(array('role' => 'user', 'content' => $prompt))
		));

		echo $result;
		exit();
	}
}
