<?php

// Main Class
require_once 'core.php';
class WpAutomaticAmazon extends wp_automatic {
	
	/*
	 * ---* Get Amazon Post ---
	 * sample response from api request https://pastebin.com/BEaGE3YJ
	 */
	function amazon_get_post($camp) {
		
		// affiliate ID
		$amazonAid = get_option ( 'wp_amazonpin_aaid', '' );
		
		if (stristr ( $camp->camp_general, 'a:' ))
			$camp->camp_general = base64_encode ( $camp->camp_general );
		$camp_general = unserialize ( base64_decode ( $camp->camp_general ) );
		
		// reading keywords that need to be processed
		$keywords = explode ( ',', $camp->camp_keywords );
		
		// default cat
		if (trim ( $camp->camp_amazon_cat ) == '') {
			$camp->camp_amazon_cat = 'All';
		}
		
		foreach ( $keywords as $keyword ) {
			
			$keyword = trim ( $keyword );
			
			if (trim ( $keyword ) != '') {
				$keyword = trim ( $keyword );
				echo ('<hr><b>Processing Keyword:</b> "' . $keyword . '"');
				
				// update last keyword
				update_post_meta ( $camp->camp_id, 'last_keyword', trim ( $keyword ) );
				
				// getting links from the db for that keyword
				$query = "select * from {$this->wp_prefix}automatic_amazon_links where link_keyword='{$camp->camp_id}_$keyword' ";
				$res = $this->db->get_results ( $query );
				
				// when no links lets get new links
				if (count ( $res ) == 0) {
					
					// clean any old cache for this keyword
					$query_delete = "delete from {$this->wp_prefix}automatic_amazon_links where link_keyword='{$camp->camp_id}_$keyword' ";
					$this->db->query ( $query_delete );
					
					$this->amazon_fetch_links ( $keyword, $camp );
					
					// getting links from the db for that keyword
					$res = $this->db->get_results ( $query );
				}
				 
				
				// delete already posted items from other campaigns
				// deleting duplicated items
				$res_count = count ( $res );
				for($i = 0; $i < $res_count; $i ++) {
					
					$t_row = $res [$i];
					
					$t_link_url = $t_row->link_url;
					
				 
					
					// get amazon item by ASIN if not complete info
					$was_an_asin = false; // to skip duplicate check again as asin get already duplicate checked
					
					if (! stristr ( $t_link_url, 'http' )) {
						
						$was_an_asin = true;
						
						$asin = $t_link_url;
						
						echo '<br>Found ASIN:' . $asin;
						
					 
						
						// check if duplicate or excluded before getting detailed information
						$t_link_url = $linkUrl = 'https://amazon.' . $camp->camp_amazon_region . '/dp/' . $asin;
						
						if ($this->is_execluded ( $camp->camp_id, $linkUrl )) {
							echo '<-- Execluded';
							continue;
						}
						
						if ($this->is_duplicate ( $t_link_url )) {
							
							// duplicated item let's delete
							unset ( $res [$i] );
							
							echo '<br>Amazon Item (' . $t_link_url . ') found cached but duplicated <a href="' . get_permalink ( $this->duplicate_id ) . '">#' . $this->duplicate_id . '</a>';
							
							// delete the item
							$query = "delete from {$this->wp_prefix}automatic_amazon_links where link_id={$t_row->link_id}";
							$this->db->query ( $query );
							continue;
						}
						
						echo ' getting complete details from Amazon...';
						
						$amazonPublic = get_option ( 'wp_amazonpin_abk', '' );
						$amazonSecret = get_option ( 'wp_amazonpin_apvtk', '' );
						
						$obj = new wp_automatic_AmazonProductAPI ( trim ( $amazonPublic ), trim ( $amazonSecret ), trim ( $amazonAid ), $camp->camp_amazon_region );
						$obj->ch = $this->ch;
						
						try {
							
							$result = $obj->getItemByAsin ( $asin );
							
							 
							
							$Item = $result->Items->Item;
							$Item = $result[0]; 
							
					

						} catch ( Exception $e ) {
							echo '<br>Amazon error:' . $e->getMessage ();
						}
						 
						
						if (isset ( $Item->ASIN ) && isset ( $Item->DetailPageURL )) {
							
							echo " Link : <a href=\"{$Item->DetailPageURL}\">{$Item->ItemInfo->Title->DisplayValue}</a> <br>";
							
							$desc = '';
							
							// Features existence
							if (isset ( $Item->ItemInfo->Features )) {
								echo '-- Features found appending to the description';
								$desc .= implode ( '<br>', $Item->ItemInfo->Features->DisplayValues );
							}
							
							$desc = addslashes ( $desc );
							$title = addslashes ( $Item->ItemInfo->Title->DisplayValue );
							
							
							// Author if exists, inject it to title
							if (isset ( $Item->ItemAttributes->Author )) {
								$title .= '**' . $Item->ItemAttributes->Author;
							} else {
								$title .= '** ';
							}
							
							// Brand if exists
							if (isset ( $Item->ItemAttributes->Brand )) {
								$title .= '**' . $Item->ItemAttributes->Brand;
							} else {
								$title .= '** ';
							}
							
							// ISBN if exists
							if (isset ( $Item->ItemAttributes->ISBN )) {
								$title .= '**' . $Item->ItemAttributes->ISBN;
							} else {
								$title .= '** ';
							}
							
							// UPC if exists
							if (isset ( $Item->ItemAttributes->UPC )) {
								$title .= '**' . $Item->ItemAttributes->UPC;
							} else {
								$title .= '** ';
							}
							
							// current price
							$price = '';
							$price = $Item->Offers->Listings[0]->Price->DisplayAmount;
							$price = trim (preg_replace( '{\(.*?\)}' , '' , $price ) );
							$price_numeric = $Item->Offers->Listings[0]->Price->Amount;
							$last_price = $price_numeric * 100;
							
							// list price
							$ListPrice = '';
							
							if(isset( $Item->Offers->Listings[0]->Price->Savings )){
								$ListPrice = $Item->Offers->Listings[0]->Price->Savings->Amount + $price_numeric;
								$ListPrice = str_replace( $price_numeric , $ListPrice , $price );
								
							}
							
							if (trim ( $ListPrice ) == '') {
								$ListPrice = $price;
							}
							
							// final saved price price-listprice
							$price = $price . '-' . $ListPrice;
							
							echo '<br>Price:'.$price;
							
							// Product Image
							$imgurl = '';
							$imgurl = $Item->Images->Primary->Large->URL;
							
							// Checking for an image set
							
							if (trim ( $imgurl ) != '') {
								
								$imgs = array();
								
								if (isset ( $Item->Images->Variants )) {
									
									foreach ( $Item->Images->Variants as $imgSet ) {
										$imgs [] = $imgSet->Large->URL;
									}
									
									if (count ( $imgs ) > 0) {
										$imgs = implode ( ',', $imgs );
										$imgurl =     $imgs . ',' . $imgurl ;
									}
								}
							}
							
							
							// review url
							$review = "https://www.amazon.{$camp->camp_amazon_region}/reviews/iframe?akid=AKIAJDYHK6WW2AYDNYJA&alinkCode=xm2&asin={$Item->ASIN}&atag={$amazonAid}&exp=2030-07-19T16%3A07%3A21Z&v=2&sig=ofoCKfF6T0LDaPzBPX%252BB2tnjuzE3gCl%252BstWxTFdnCJQ%253D";
							
							
							// building the item
							$t_row->link_url = $linkUrl;
							$t_row->link_title = $title; 
							$t_row->link_desc = ( string ) $desc;
							$t_row->link_price = ( string ) $price;
							$t_row->link_img = ( string ) $imgurl;
							$t_row->link_review = ( string ) $review;
							
							 
							
							$res [$i] = $t_row;
						} else { // valid returned item
						         
							// delete non valid item
							$query = "delete from {$this->wp_prefix}automatic_amazon_links where link_id={$t_row->link_id}";
							$this->db->query ( $query );
							
							unset ( $res [$i] );
						}
					} // ASIN product
					
					 
					
					if (! $was_an_asin && $this->is_duplicate ( $t_link_url )) {
						
						// duplicated item let's delete
						unset ( $res [$i] );
						
						echo '<br>Amazon Item (' . $t_row->link_title . ') found cached but duplicated <a href="' . get_permalink ( $this->duplicate_id ) . '">#' . $this->duplicate_id . '</a>';
						
						// delete the item
						$query = "delete from {$this->wp_prefix}automatic_amazon_links where link_id={$t_row->link_id}";
						$this->db->query ( $query );
					} else {
						if (stristr ( $t_link_url, 'http' ))
							break;
					}
				}
				
				 				
				// check again if valid links found for that keyword otherwise skip it
				if (count ( $res ) > 0) {
					
					// lets process that link
					$ret = $res [$i];
					
					 
					// ;
					
					/*
					 * //fix commas and dots for es
					 * if($camp->camp_amazon_region == 'es' || $camp->camp_amazon_region == 'de' || $camp->camp_amazon_region == 'fr' || $camp->camp_amazon_region == 'it' ){
					 *
					 * $ret->link_price = str_replace(',','*',$ret->link_price);
					 * $ret->link_price = str_replace('.',',',$ret->link_price);
					 * $ret->link_price = str_replace('*','.',$ret->link_price);
					 *
					 * }
					 */
					
					// fix price split
					if (stristr ( $ret->link_price, '-' )) {
						
						// echo '<br>Found Price:'.$ret->link_price;
						
						$priceParts = explode ( '-', $ret->link_price );
						
						$ret->link_price = $priceParts [0];
						$salePrice = $priceParts [1];
					} else {
						$salePrice = $ret->link_price;
					}
					
					$offer_title = $ret->link_title;
					
					$temp ['product_author'] = '';
					$temp ['product_brand'] = '';
					$temp ['product_isbn'] = '';
					
					if (stristr ( $offer_title, '**' )) {
						
						$titleParts = explode ( '**', $offer_title );
						
						$offer_title = $titleParts [0];
						$temp ['product_author'] = $titleParts [1];
						$temp ['product_brand'] = $titleParts [2];
						
						if (isset ( $titleParts [3] ))
							$temp ['product_isbn'] = $titleParts [3];
						
						if (isset ( $titleParts [4] )) {
							$temp ['product_upc'] = $titleParts [4];
						} else {
							$temp ['product_upc'] = '';
						}
					}
					
					$offer_desc = $ret->link_desc;
					
					$offer_desc = str_replace ( 'View larger.', '', $offer_desc );
					
					$offer_url = $ret->link_url;
					
					$temp ['source_link'] = $offer_url;
					
					$offer_price = trim ( $ret->link_price );
					$offer_img = $ret->link_img;
					
					if (! stristr ( $offer_url, 'tag' )) {
						$offer_url .= '?tag=' . $amazonAid;
					}
					
					$temp ['offer_title'] = $offer_title;
					$temp ['product_title'] = $offer_title;
					$temp ['offer_desc'] = $offer_desc;
					$temp ['product_desc'] = $offer_desc;
					$temp ['offer_url'] = $offer_url;
					$temp ['product_link'] = $offer_url;
					$temp ['offer_price'] = $offer_price;
					$temp ['product_price'] = $offer_price;
					$temp ['product_list_price'] = $salePrice;
					$temp ['offer_img'] = $offer_img;
					$temp ['product_img'] = $offer_img;
					$temp ['price_numeric'] = '00.00';
					$temp ['price_currency'] = '$';
					
					// increasing expiration date of the review
					$ret->link_review = preg_replace ( '{exp\=20\d\d}', 'exp=2030', $ret->link_review );
					$ret->link_review = str_replace ( 'http://', '//', $ret->link_review );
					
					$temp ['review_link'] = '';
					$temp ['review_iframe'] = '';
					
					// chart url
					if (stristr ( $offer_url, 'creativeASIN' )) {
						
						$enc_url = urldecode ( $offer_url );
						$enc_url = explode ( '?', $enc_url );
						$enc_parms = $enc_url [1];
						$enc_parms_arr = explode ( '&', $enc_parms );
						
						$asin = '';
						$tag = '';
						$subscription = '';
						
						foreach ( $enc_parms_arr as $param ) {
							
							if (stristr ( $param, 'creativeASIN' )) {
								$asin = str_replace ( 'creativeASIN=', '', $param );
							} elseif (stristr ( $param, 'tag=' )) {
								$tag = str_replace ( 'tag=', '', $param );
							} elseif (stristr ( $param, 'SubscriptionId' )) {
								$subscription = str_replace ( 'SubscriptionId=', '', $param );
							}
						}
					} else {
						
						$link_parts = explode ( 'dp/', $ret->link_url );
						
						$asin = $link_parts [1];
					}
					
					echo '<br>Product found: <a href="' . $ret->link_url . '">' . $asin . '</a>';
					
					$temp ['product_asin'] = $asin;
					
					$region = $camp->camp_amazon_region;
					
					$chart_url = "https://www.amazon.{$camp->camp_amazon_region}/gp/aws/cart/add.html?AssociateTag=$amazonAid&ASIN.1=$asin&Quantity.1=1";
					
					$temp ['chart_url'] = $chart_url;
					
					// price extraction
					if (trim ( $ret->link_price ) != '') {
						
						$thousandSeparator = ',';
						
						// restore commas and dots
						if ($camp->camp_amazon_region == 'es' || $camp->camp_amazon_region == 'de' || $camp->camp_amazon_region == 'fr' || $camp->camp_amazon_region == 'it') {
							$thousandSeparator = '.';
						}
						
						// woo sousands separator
						if (class_exists ( 'WooCommerce' )) {
							$woocommerce_price_thousand_sep = get_option ( 'woocommerce_price_thousand_sep', '' );
							
							if ($woocommerce_price_thousand_sep == '.' || $woocommerce_price_thousand_sep == ',') {
								$thousandSeparator = $woocommerce_price_thousand_sep;
								echo '<br>Woo Thusand separator:' . $woocommerce_price_thousand_sep;
							}
						}
						
						echo '<br>Returned Price:' . $ret->link_price;
						
						// good we have a price
						$price_no_commas = str_replace ( $thousandSeparator, '', $offer_price );
						preg_match ( '{\d.*\d}is', ($price_no_commas), $price_matches );
						
						$temp ['price_numeric'] = $price_matches [0];
						$temp ['price_currency'] = str_replace ( $price_matches [0], '', $offer_price );
						
						// fixing listPrice
						$price_no_commas = str_replace ( $thousandSeparator, '', $salePrice );
						preg_match ( '{\d.*\d}is', ($price_no_commas), $price_matches );
						$temp ['list_price_numeric'] = $price_matches [0];
					}
					
					$this->used_keyword = $ret->link_keyword;
					
					// update the link status to 1
					$query = "delete from {$this->wp_prefix}automatic_amazon_links where link_id={$ret->link_id}";
					$this->db->query ( $query );
					
					// fix imgSet
					$temp ['product_imgs'] = $temp ['product_img'];
					if (stristr ( $temp ['product_img'], ',' )) {
						// imageset found
						$imgs = explode ( ',', $temp ['product_imgs'] );
						
						// swap last image to the top
						$imgsCount = count ( $imgs );
						$lastImageIndex = $imgsCount - 1;
						$lastImage = $imgs [$lastImageIndex];
						unset ( $imgs [$lastImageIndex] );
						
						if (! stristr ( ($lastImage), 'jpg' )) {
							$imgs = array_merge ( array (), $imgs );
						} else {
							$imgs = array_merge ( array (
									$lastImage 
							), $imgs );
						}
						
						$temp ['product_imgs'] = implode ( ',', $imgs );
						$temp ['product_img'] = $temp ['offer_img'] = $imgs [0];
					}
					
					// imgs html
					if(in_array('OPT_AM_FULL_IMG' , $this->camp_opt)){
						$cg_am_full_img_t = stripslashes(@$camp_general ['cg_am_full_img_t']);
					}else{
						$cg_am_full_img_t = '' ;
					}
					
					
					
					if (trim ( $cg_am_full_img_t ) == '') {
						$cg_am_full_img_t = '<img src="[img_src]" class="wp_automatic_gallery" />';
					}
					
					$product_imgs_html = '';
					
					$allImages = explode ( ',', $temp ['product_imgs'] );
					$allImages_html = '';
					
					foreach ( $allImages as $singleImage ) {
						
						$singleImageHtml = $cg_am_full_img_t;
						$singleImageHtml = str_replace ( '[img_src]', $singleImage, $singleImageHtml );
						$allImages_html .= $singleImageHtml;
					}
					
					$temp ['product_imgs_html'] = $allImages_html;
					
					// product price with discount
					if ($temp ['product_price'] == $temp ['product_list_price']) {
						$temp ['price_with_discount_fixed'] = $temp ['product_price'];
					} else {
						$temp ['price_with_discount_fixed'] = '<del>' . $temp ['product_list_price'] . '</del> - ' . $temp ['product_price'];
					}
					
					// no price
					if (trim ( $temp ['product_price'] ) == '')
						$temp ['product_price'] = $temp ['price_numeric'];
					if (trim ( $temp ['product_list_price'] ) == '')
						$temp ['product_list_price'] = $temp ['price_numeric'];
					
					return $temp;
				} else {
					
					// return false;
				}
			} // trim
		} // foreach keyword
	}
	
	/*
	 * ---* Get Amazon links ---
	 */
	function amazon_fetch_links($keyword, $camp) {
		echo "<br>Requesting new products from Amazon for the keyword: \"" . $keyword . '"...';
		
		// ini options
		$md5 = md5 ( $keyword );
		$camp_opt = unserialize ( $camp->camp_options );
		
		if (stristr ( $camp->camp_general, 'a:' ))
			$camp->camp_general = base64_encode ( $camp->camp_general );
		$camp_general = unserialize ( base64_decode ( $camp->camp_general ) );
		
		$camp_general = array_map ( 'wp_automatic_stripslashes', $camp_general );
		$amazonPublic = get_option ( 'wp_amazonpin_abk', '' );
		$amazonSecret = get_option ( 'wp_amazonpin_apvtk', '' );
		$amazonAid = get_option ( 'wp_amazonpin_aaid', '' );
		
		if (trim ( $amazonPublic ) == '' || trim ( $amazonSecret ) == '' || trim ( $amazonAid ) == '') {
			$this->log ( 'Error', 'Amazon Public Key,Private Key and associate id required visit settings and add them' );
			echo '<br>Amazon Public Key,Private Key and associate id required visit settings and add them';
			return false;
		}
		
		// Search keyword
		$clickkey = ($keyword);
		
		// Getting start page
		$query = "select  * from {$this->wp_prefix}automatic_keywords where keyword_name='$keyword' and keyword_camp = {$camp->camp_id} ";
		$ret = $this->db->get_results ( $query );
		
		$row = $ret [0];
		$start = $row->amazon_start;
		
		// max api pages
		$maxApiPages = 10;
		
		// check if scrapping
		$first_sort_by_high_call = false; //flag for setting click_key to 2 if true
		if ( ! in_array('OPT_AMAZON_NOMAGIC' , $camp_opt) && ($start > $maxApiPages ||  $row->clickbank_start != 1) ) {
			
			
			//set order to high to low
			$camp_general ['cg_am_order'] = "Price:HighToLow";
			$camp_opt[] = "OPT_AM_ORDER";
			
			//max price which is lowest price returned last call (clickbank_start field will contain the max price)
			if($row->clickbank_start > 1){
				
				if( is_numeric($camp_general ['cg_am_max']) && $camp_general ['cg_am_max'] < $row->clickbank_start   ){
					//do nothing let the set value overwrite
				}else{
					$camp_general ['cg_am_max'] = $row->clickbank_start ;
				}
				
				$camp_opt[] = "OPT_AM_PRICE";
				
				echo '<br>Getting more products ordered by price high to low and is cheaper than '.$camp_general ['cg_am_max'] / 100 ;
				
			}elseif( $row->clickbank_start == 1 ){
				
				echo '<br>Getting more products ordered by price high to low';
				
				//first sorty by high call 
				$first_sort_by_high_call = true;
				
			}else{
				//0
				
				echo '<br>Getting more products ordered by price high to low';
				
			}
			
			//reset start page to 1
			if($start > $maxApiPages) 	$start = 1;
	
		}
		
		// check if the start = -1 this means the keyword is exhausted
		if ($start == '-1' || $start == 11) {
			echo "<br>Keyword \"$keyword\" is already exhausted and does not have any new links to fetch.";
			
			// check if it is reactivated or still deactivated
			if ($this->is_deactivated ( $camp->camp_id, $keyword )) {
				$start = 1;
			} else {
				// still deactivated
				return false;
			}
		}
		
		echo '<br>Current search page number is :' . $start . '/10';
		
		// amazon
		
		$obj = new wp_automatic_AmazonProductAPI ( trim ( $amazonPublic ), trim ( $amazonSecret ), trim ( $amazonAid ), $camp->camp_amazon_region );
		$obj->ch = $this->ch;
		
		try {
			
			// additional params
			$additionalParm = array ();
			
			// node param
			if (in_array ( 'OPT_AMAZON_NODE', $camp_opt ) & trim ( $camp_general ['cg_am_node'] ) != '') {
				echo '<br>Specific node : ' . $camp_general ['cg_am_node'];
				$additionalParm ['BrowseNodeId'] = $camp_general ['cg_am_node'];
			}
			
			// min and max param
			$max = '';
			$min = '';
			
			if (in_array ( 'OPT_AM_PRICE', $camp_opt )) {
				$min = $camp_general ['cg_am_min'];
				$max = $camp_general ['cg_am_max'];
				
				echo '<br>Price range ' . $min . ' - ' . $max;
			}
			
			// search param
			if (in_array ( 'OPT_AMAZON_PARAM', $camp_opt )) {
				$additionalParm [$camp_general ['cg_am_param_type']] = $camp_general ['cg_am_param'];
			}
			
			// order param
			if (in_array ( 'OPT_AM_ORDER', $camp_opt )) {
				$additionalParm ['SortBy'] = $camp_general ['cg_am_order'];
			}
			
			// amazon merchant
			if (in_array ( 'OPT_AMAZON_MERCHANT', $camp_opt )) {
				$additionalParm ['Merchant'] = 'Amazon';
			}
			
			// condition parameter
			if (in_array ( 'OPT_AM_CONDITION', $camp_opt )) {
				$additionalParm ['Condition'] = $camp_general ['cg_am_condition'];
			}
			
			if (stristr ( $clickkey, 'B0' )) {
				$result = $obj->getItemByAsin ( $clickkey );
			} else {
				$result = $obj->getItemByKeyword ( "$clickkey", $start, $camp->camp_amazon_cat, $additionalParm, $min, $max );
			}
		} catch ( Exception $e ) {
			$this->log ( 'Amazon Error', $e->getMessage () );
			echo '<br>' . $e->getMessage ();
			return false;
		}
		
		//echo ' <pre>';
		//print_r ( $result );
		
		if (count ( $result ) != 0) {
			
			// $pagesNum = $result->Items->TotalPages;
			// echo '<br>Available Pages:' . $pagesNum;
			
			$camp_cb_category = $camp->camp_cb_category;
			
			if (isset ( $result->Items->MoreSearchResultsUrl )) {
				$moreUrl = $result->Items->MoreSearchResultsUrl;
				$moreUrl .= '';
				
				if (stristr ( $moreUrl, 'location' )) {
					$locParts = explode ( 'location=', $moreUrl );
					$locParts2 = explode ( '&', $locParts [1] );
					$finalMore = $locParts2 [0];
					
					if (trim ( $finalMore ) != '')
						$moreUrl = urldecode ( $finalMore );
				}
				
				echo '<br>More items url:' . $moreUrl;
				update_post_meta ( $camp->camp_id, $md5 . '_more', $moreUrl );
			}
			
			echo '<ol>';
			
			$last_price = ''; 
			
			foreach ( $result as $Item ) {
				 
				echo "<li>ASIN : {$Item->ASIN}  Link : <a href=\"{$Item->DetailPageURL}\">{$Item->ItemInfo->Title->DisplayValue}</a> <br>";
				
				// Product URL
				$linkUrl = 'https://amazon.' . $camp->camp_amazon_region . '/dp/' . $Item->ASIN;
				
				// Excluded?
				if ($this->is_execluded ( $camp->camp_id, $linkUrl )) {
					echo '<-- Execluded';
					continue;
				}
				
				// no price?
				if(! isset($Item->Offers)){
					echo '<-- No price';
					continue;
				}
				
				//numeric price grab
				if(isset($Item->Offers)){
				$price_numeric = $Item->Offers->Listings[0]->Price->Amount;
				$last_price = $price_numeric * 100;
				echo '<--last price:'.$last_price;
				}
				
				// Duplicate?
				if (! $this->is_duplicate ( $linkUrl )) {
					
					$desc = '';
					
					// Features existence
					if (isset ( $Item->ItemInfo->Features )) {
						echo '-- Features found appending to the description';
						$desc .= implode ( '<br>', $Item->ItemInfo->Features->DisplayValues );
					}
					
					$desc = addslashes ( $desc );
					$title = addslashes ( $Item->ItemInfo->Title->DisplayValue );
					
					
					// Author if exists, inject it to title
					if (isset ( $Item->ItemAttributes->Author )) {
						$title .= '**' . $Item->ItemAttributes->Author;
					} else {
						$title .= '** ';
					}
					
					// Brand if exists
					if (isset ( $Item->ItemAttributes->Brand )) {
						$title .= '**' . $Item->ItemAttributes->Brand;
					} else {
						$title .= '** ';
					}
					
					// ISBN if exists
					if (isset ( $Item->ItemAttributes->ISBN )) {
						$title .= '**' . $Item->ItemAttributes->ISBN;
					} else {
						$title .= '** ';
					}
					
					// UPC if exists
					if (isset ( $Item->ItemAttributes->UPC )) {
						$title .= '**' . $Item->ItemAttributes->UPC;
					} else {
						$title .= '** ';
					}
					
					// current price
					$price = '';
					$price = $Item->Offers->Listings[0]->Price->DisplayAmount;
					$price = trim (preg_replace( '{\(.*?\)}' , '' , $price ) );
					$price_numeric = $Item->Offers->Listings[0]->Price->Amount;
					$last_price = $price_numeric * 100;
					
					// list price
					$ListPrice = '';
					
					if(isset( $Item->Offers->Listings[0]->Price->Savings )){
						$ListPrice = $Item->Offers->Listings[0]->Price->Savings->Amount + $price_numeric;  
						$ListPrice = str_replace( $price_numeric , $ListPrice , $price );
						
					}
					
					if (trim ( $ListPrice ) == '') {
						$ListPrice = $price;
					}
					
					// final saved price price-listprice
					$price = $price . '-' . $ListPrice;
					
					echo '<br>Price:'.$price;
					
					// Product Image
					$imgurl = '';
					$imgurl = $Item->Images->Primary->Large->URL;
					
					// Checking for an image set
					
					if (trim ( $imgurl ) != '') {
					
						$imgs = array();
						
						if (isset ( $Item->Images->Variants )) {
							
							foreach ( $Item->Images->Variants as $imgSet ) {
								$imgs [] = $imgSet->Large->URL;
							}
							
							if (count ( $imgs ) > 0) {
								$imgs = implode ( ',', $imgs );
								$imgurl =     $imgs . ',' . $imgurl ;
							}
						}
					}
					 
					
					// review url
					$review = "https://www.amazon.{$camp->camp_amazon_region}/reviews/iframe?akid=AKIAJDYHK6WW2AYDNYJA&alinkCode=xm2&asin={$Item->ASIN}&atag={$amazonAid}&exp=2030-07-19T16%3A07%3A21Z&v=2&sig=ofoCKfF6T0LDaPzBPX%252BB2tnjuzE3gCl%252BstWxTFdnCJQ%253D";
				 
					 $query = "INSERT INTO {$this->wp_prefix}automatic_amazon_links ( link_url , link_title , link_keyword  , link_status ,link_desc,link_price,link_img,link_review)VALUES ( '$linkUrl', '$title', '{$camp->camp_id}_$keyword', '0','$desc','{$price}','{$imgurl}','{$review}')";
					 $insert = $this->db->query ( $query );
					
					 
					 
				
				} else {
					echo ' <- duplicated <a href="' . get_edit_post_link ( $this->duplicate_id ) . '">#' . $this->duplicate_id . '</a>';
				}
				
				echo '</li>';
			}
			
			echo '</ol>';
			
		
			
		} // if count
		
		if ( count($result) > 0  ) {
			
			// if ASIN
			if (count($result)  == 1 && stristr ( $keyword, 'B0' )) {
				echo '<br>Keyword is an ASIN ... ';
				
				$this->deactivate_key ( $camp->camp_id, $keyword, 0 );
				
				$newstart = '-1';
				$query = "update {$this->wp_prefix}automatic_keywords set amazon_start  = '$newstart' where keyword_name='$keyword'  and keyword_camp = {$camp->camp_id} ";
				$this->db->query ( $query );
				
				return true;
			}
			
			// increment the start with 1
			$newstart = $start + 1;
			
			//clickbank_start	max next price if last page 
			$clickbank_start_part = '';
			
			if($first_sort_by_high_call){
				//first key update
				$clickbank_start_part = " , clickbank_start	= 0 ";
			}elseif($newstart == 11 &&  in_array( 'OPT_AM_ORDER'  , $camp_opt) && $camp_general ['cg_am_order'] == "Price:HighToLow" ){
				//update price as next call will be a next set of 10 pages
				
				//if price == old edge price, change it not to get same exact previoud data
				if($last_price == $row->clickbank_start ) $last_price-- ;
				$clickbank_start_part = " , clickbank_start	= $last_price ";
			}
			
			
			$query = "update {$this->wp_prefix}automatic_keywords set  amazon_start  = '$newstart' $clickbank_start_part where keyword_name='$keyword'  and keyword_camp = {$camp->camp_id} ";
			$this->db->query ( $query );
			 
			//deactivate if next page is 11 and magic search is disabled
			if($newstart == 11 && in_array('OPT_AMAZON_NOMAGIC',$camp_opt)){
				if (! in_array ( 'OPT_NO_DEACTIVATE', $camp_opt )) { 
					$this->deactivate_key ( $camp->camp_id, $keyword ) ;
				}
			}
			
			return true;
		} else {
			// there was no links lets deactivate
			$newstart = '-1';
			$query = "update {$this->wp_prefix}automatic_keywords set amazon_start  = '$newstart' , clickbank_start	= 1  where keyword_name='$keyword'  and keyword_camp = {$camp->camp_id} ";
			$this->db->query ( $query );
			
			// deactivate key
			if (! in_array ( 'OPT_NO_DEACTIVATE', $camp_opt )) {
				
				if (stristr ( $keyword, 'B0' )) {
					
					echo '<br>Keyword is an ASIN ... ';
					$this->deactivate_key ( $camp->camp_id, $keyword, 0 );
				} else {
					$this->deactivate_key ( $camp->camp_id, $keyword );
				}
			}
			
			echo '<br>No more items at amazon to get ';
			
			return false;
		}
	} // end func
}