<?php
namespace Models;

class Fr_python  {
	public $f3, $sets, $web, $messages, $method='POST';

	public function __construct($f3, $sets) {
		$this->f3=$f3;
		$this->sets=$sets;
		$this->web=\Web::instance();
		$this->messages=new \Models\Messages();
	}

	// Тест сервера
	function test($driver, $restart=true) {
		// Тестовый запрос
		return;
		$url=$this->sets['url'];
		$options = array(
			'timeout'=>3,
    		'method'  => $this->method,
    		'content' => "data=test;\n"
		);
		$res=$this->web->request($url, $options);
		// Если в ответ не пришел код ответа 200, то надо запустить сервер
		if(mb_strpos($res['headers'][0], '200')===false) {
			// Если выбран драйвер принтера
			if($driver!='') {
				if($restart) {
					$script=$driver.'/server.py';
					//include('drivers/start.php');
					$this->test($driver, false);
				}
				else {
					echo "Не удается запустить драйвер принтера";
					exit();
				}
			}
			else {
				echo "Сервер принтера не доступен";
				exit();
			}
		}
	}

	// Узнаем состояние смены
    function change_status() {
    	return 'opened';
    }

	// Отправка запроса
	function send_ajax($data, $timeout=295, $view=false) {
		//$this->test($this->sets['driver']);
		$url=$this->sets['url'];
		$options = array(
			'timeout'=>$timeout,
    		'method'  => $this->method,
    		'content' => 'data='.$data
		);
		$res=$this->web->request($url, $options);
		$continue_html= \Template::instance()->render('fr_error_continue.htm');
		// Проверяем ответ сревера
		if(mb_strpos($res['headers'][0], '200')===false) {
			if($res['error']) {
				echo $res['error'].$continue_html;
			}
			else {
				echo $res['body'].$continue_html;
			}
			exit();
		}
		// проверяем что смог сделать сервер
		$ok=true;
		$er='';
		$strs=explode("\n", $res['body']);
		$strs = array_diff($strs, array(''));
		$d=explode("\n", $data);
		$d = array_diff($d, array(''));
		foreach ($strs as $str) {
			$csv=str_getcsv($str, ';');
			if($csv[1]!=0) {
				$ok=false;
				$er.='<p class="false">Ошибка '.$csv[1].' '.$csv[2].'</p>';
			}
		}
		if($ok && count($strs)==count($d)) {
			if($view) {
				var_dump($res['body']);
				exit();
			}
			return true;
		}
		else {
			if($er=='') {
				echo '<pre>'.$data.'</pre>';
				echo '<pre>'.$res['body'].'</pre>';
				echo '<pre>Строк отправлено/получено:'.count($d).'/'.count($strs).'</pre>';
				$er='<p class="false">'.$this->messages->message('error')['txt'].'</p>';
			}
			echo $er;
			echo $continue_html;
			exit();
		}
	}
}
