#!/usr/bin/php
<?php
ini_set('error_reporting', 0);
ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
set_time_limit(7300);
date_default_timezone_set ("Europe/Moscow");
header('Content-Type: text/html; charset=utf-8');

$time = time();
$tg_admin_id = "569350898";

require ("/home/system/db.php");
require ("/home/system/function_telegram.php");
require ("/home/system/function_date_transform.php");
require ("/home/system/function_s1c_debug.php");

function debug_tg($msg)
{
	global $tg_admin_id;
	message_to_telegram($msg, $tg_admin_id);
}

function curl_req($chat, $chatID="")
{
	if (!empty($chatID))
		$chat = $chatID;
	$req_array = array('chat' => $chat);
	$ch = curl_init('https://lab8.slimcrm.ru/bot_gamma/data_chat.php');
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($req_array, '', '&'));
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
	curl_setopt($ch, CURLOPT_TIMEOUT, 7200);
	$html = curl_exec($ch);
	curl_close($ch);

	return $html;
}

if ($argv[1] != "")
	$limit = $argv[1];
elseif ($argv[1] == "*")
	$limit = 0;
else
	$limit = 1;

if ($argv[2] != "")
{
	$chatID = $argv[2];
	$where_chatID = "AND tidu_chat_username='".$chatID."' OR tidu_chat_username='".$chatID."'";
}
else
{
	$chatID = "";
	$where_chatID = "";
}
if ($limit == 0)
{
	$sql_limit = "";
	$limit = "All";
}
else
	$sql_limit = "LIMIT ".$limit; 

echo "\nStart\n";
echo "Limit: ".$limit."\n";
flush();
$time_15d = ($time - 1296000);
echo "T1 (now): ".$time."\n";
echo "T2 (-15 day): ".$time_15d."\n";

$chats_array = db_query("SELECT * 
	FROM 
		telegram_incoming_data_userbot 
	WHERE
		(
			tidu_date_update < {$time_15d}
			AND
			tidu_lock='0' 
			AND 
			tidu_del='0' 
			AND 
			tidu_cron_true='0'
		)
		{$where_chatID}
	ORDER 
		BY 
			tidu_id DESC
	{$sql_limit}
", "API");
/*tidu_chat_username 
	ORDER
		BY 
			tidu_date_update*/
$chats_num = mysql_num_rows($chats_array);

if ($chats_num > 0)
{
	$i = 1;
	$good = 0;
	$error = 0;
	while($chats = mysql_fetch_object($chats_array))
	{
		db_query("UPDATE 
				telegram_incoming_data_userbot 
			SET 
				tidu_lock='1' 
			WHERE 
				tidu_id='{$chats->tidu_id}'
		", "API");
		
		$chat = str_replace(array(" ", "\r", "\n"), "", $chats->tidu_chat_username);
		echo "\n".$chat." (".$i." from ".$chats_num.")\n";
		echo "Send request: Start (max wait 7200 sec)\n";
		$start_req = time();
		echo "Time request start: ".$start_req."\n";
		flush();
		//$html = file_get_contents('https://lab8.slimcrm.ru/bot_gamma/data_chat.php?chat='.$chat);
		$html = curl_req($chat, $chatID);
		echo "Send request: Finish\n";
		$finish_req = time();
		echo "Time request finish: ".$finish_req."\n";
		echo "Time2request: ".($finish_req-$start_req)." sec.\n";
		flush();

		if (!empty($html))
		{
			db_query("UPDATE 
					telegram_incoming_data_userbot 
				SET 
					tidu_data_array='{$html}', 
					tidu_date_update='{$time}', 
					tidu_lock='0' 
				WHERE 
					tidu_chat_username='{$chat}'
			", "API");

			db_query("INSERT 
				INTO 
					telegram_incoming_data_userbot_log 
				SET 
					tidul_chat_username='{$buffer}', 
					tidul_data_array='{$html}', 
					tidul_date_add='{$time}'
			", "API");
			
			echo "Task: OK\n";
			$good++;
		}
		else
		{
			echo "Task: ERROR\n";
			echo "chat_data_json: ".$html."\n";
			
			if (($finish_req - $start_req) > 10)
				$error++;
			else
			{
				db_query("UPDATE 
						telegram_incoming_data_userbot 
					SET 
						tidu_del='1' 
					WHERE 
						tidu_id='{$chats->tidu_id}'
				", "API");
			}
		}
		$end_task = time();
		echo "Time end task: ".$end_task."\n";
		flush();
		
		gc_collect_cycles();
		
		echo "gc_collect_cycles: true\n";
		echo "Time end cycle: ".time()."\n";
		echo "Good tasks: ".$good."\n";
		echo "Errors: ".$error."\n";
		flush();
		
		if ($limit != 1 and $error < 3)
		{
			$sleep = rand(120, 180);
			echo "Sleep start: ".$sleep." sec\n";
			flush();
			sleep($sleep);
			echo "Sleep end: ".$sleep." sec\n";
			flush();
		}
		elseif ($limit != 1 and $error > 2)
		{
			$sleep = rand(($finish_req-$start_req) + 3600, ($finish_req-$start_req) + 7200);
			echo "Warning sleep start: ".$sleep." sec\n";
			flush();
			sleep($sleep);
			echo "Warning sleep end: ".$sleep." sec\n";
			flush();
			$sleep = 0;
			$error = 0;
		}
		
		$i++;
	}
}
?>