<?
	include_once("config.php");
	class System extends Fly5 {
		var $COLLISIONTEXT="[[[충돌발견 - 충돌 내용을 해결하고 이 라인도 삭제한 후 다시 저장할것]]]";
		function execute(&$view, $path, $args)
		{
			$a = $_REQUEST;
			switch($path) {
			case "System/api/savetodo":
				print_r($_REQUEST);
				file_put_contents("tmp/todo.txt", $a[todo]);
				break;
			case "System/api/loadtodo":
				$result = array(
					todo=>file_get_contents("tmp/todo.txt"),
				);
				break;
			/*case "System/api/savetodov2.1":
				$fn = "tmp/todov2.txt";
				//if ($a[todoage] != filemtime($fn))
				{
					file_put_contents("tmp/todo_tmp.txt", $a[todo]."\n==== ".date("Y-m-d H:i:s")." ====\n");
					//shell_exec("cd tmp&&./merge.sh todo_tmp.txt todov2.txt lastmerged");
					
					echo shell_exec("diff tmp/todov2 tmp/lastmerged");
					die();//echo "XXX";
					
					$a[todo] = file_get_contents("tmp/lastmerged");
				} 
				unlink($fn);
				file_put_contents($fn, $a[todo]);
				// save 후 loadtodov2 로 이어짐 break 없는게 맞음*/
			case "System/api/savetodov2":
				$fn = "tmp/todov2.txt";
				if (strpos($a[todo], $this->COLLISIONTEXT) !==false)
					die("충돌을 해결하기 전에는 저장할 수 없음");
				//echo ($a[todoage]);die();
				if ($a[todoage] != filemtime($fn))
				{
					file_put_contents("tmp/todo_tmp.txt", $a[todo]);
					//shell_exec("cd tmp&&./merge.sh todo_tmp.txt todov2.txt lastmerged");
					
					$diff = shell_exec("diff tmp/todov2.txt tmp/todo_tmp.txt");
					//die();//echo "XXX";
					$a[todo] = $this->COLLISIONTEXT."\n"
						.$diff
						.$this->COLLISIONTEXT."\n\n"
						.file_get_contents("tmp/todo_tmp.txt");
				} 
				unlink($fn);
				file_put_contents($fn, $a[todo]);
				$result = array(
					todo=>file_get_contents($fn),
					todoage=>filemtime($fn),
				);
				break;
			case "System/api/loadtodov2":
				//echo filemtime("tmp/todov2.txt");
				$result = array(
					todo=>file_get_contents("tmp/todov2.txt"),
					todoage=>filemtime("tmp/todov2.txt"),
				);
				break;
			case "System/api/am-i-logged-in":
				$this->checklogin();
				
				break;
			
			case "System/api/login":
				$result = $this->login($_REQUEST);
				
				break;
			case "System/api/logout":
				
				break;
			default:
				$view = "$path.pug";
				return;
			}
			reply_json($result);
		}
		/**
			로그인 시나리오 변경 
			cookie에 username 들어있는 username 을 자동 생성, 몽땅 pass 시킴
			cookie에 username 과 hid가 없을때만 fail
			
		*/
		function checklogin()		
		{
			if(!$_COOKIE[username] || !$_COOKIE[hid]){
				modlog("로그인 실패: no user name");
				throw new Exception('invalid loggin info');
			}
			query("insert into mhs4_user
				(username, hid, password, role, memo)
				values
				(:username, :hid, '', '사용자', '')
				on duplicate key update
					no=no", $_COOKIE);
			$rows = query("select * from mhs4_user where 
				username=:username and hid=:hid", $_COOKIE);
			if(count($rows) == 0) {
				modlog("로그인 실패: $_COOKIE[username]");
				throw new Exception('invalid loggin info');
			}
			$u = $rows[0];
			setcookie("user_role", $u[role], 0x7fffffff, '/');
			return $u;
		}
		function checklogin_old()
		{
			$rows = query("select * from mhs4_user where 
				username=:username and password=:password  and hid=:hid", $_COOKIE);
			if(count($rows) == 0) {
				modlog("로그인 실패: $_COOKIE[username]");
				throw new Exception('invalid loggin info');
			}
			$u = $rows[0];
			setcookie("user_role", $u[role], 0x7fffffff, '/');
			return $u;
		}
		/**
			1. 병원로그인 시도
			2. 병원로그인 성공할 경우, id pw localdb에 저장 (따라서, 병원로그인때 마다 id pw 변동이 있으면 새로 저장됨)
			3. locallogin 시도
			4. 추후 login check 때는 로컬db 로그인만 체크한다.
			5. log 기록
		*/
		function login($a)
		{
			//병원id체크(생략)
			//성공시 병원id/pw db에 기록 (생략)
			
			$result = $this->checklogin();
			modlog("로그인");
			return $result;
		}
		function logview(&$view)
		{
			$view = "System/logview.pug";
			
			return array(
				logall=>file_get_contents("tmp/mhs4-2020-05.log"),
			);
		}
		function log()
		{
			$a = $_REQUEST;
			modlog($a[log]);
		}
	}
?>