<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class User_model extends CI_Model
{
	
	const TOKENPW = 'violet';
	
	public function __construct(){
        parent::__construct();
		$this->vservices->setApiUrl($this->config->item('api_url'));
		$this->vservices->setConnection($this->curl);
    } 
	
	public function checkLogin ($src, $token, $username, $password) 
	{
		$data = $this->vservices->actionExecute('login', array('src' => $src, 'token' => $token, 'username' => $username, 'password' => $password), 'user');
		
		$arr_users = explode("&", $data);
		$str_status = '';
		$str_fullname = '';
		$str_usid = '';
		$usid = '';
		$fullname = '';
		
		for ($i=0; $i < count($arr_users); $i++)
		{
			if (strpos($arr_users[$i], 'status=') !== false)
			{
				$str_status = $arr_users[$i];
			}
			
			if (strpos($arr_users[$i], 'fullname=') !== false)
			{
				$str_fullname = $arr_users[$i];
			}
			
			if (strpos($arr_users[$i], 'id=') !== false)
			{
				$str_usid = $arr_users[$i];
			}
		}
		$arr_status = explode("=", $str_status);
		if ($str_fullname != '')
		{
			$arr_fullname = explode("=", $str_fullname);
			$fullname = $arr_fullname[1];
		}
		if ($str_usid !== '')
		{
			$arr_usid = explode("=", $str_usid);
			$usid = $arr_usid[1];
		}
		$status = (int)$arr_status[1];
		
		if ($status == 0 || $status == 4){
			$us_id = (int)$usid;
			$query = "SELECT * FROM tbluser WHERE us_id = ?";
			$result = $this->db->query($query, array($us_id));
			if($result->num_rows() == 1){
				return $data;
			}else
			{
				return null;
			}
		}else
		{
			return $data;
		}
	}

	public function register ($username, $collaborator, &$status='')
	{
		$user = array();
		$password = $this->create_random_password();
		$src = 'SBG';
		$sms = '';
		$id = 0;
		$errMsg = '';
		$token = md5($username.self::TOKENPW);		
		$phone = $username;
		
		if (!is_null($collaborator) || $collaborator != ''){
			if(!$this->isExistcollaborator($collaborator)){
				$sms = "Khong tim thay cong tac vien nao co so dien thoai [".$collaborator."] tren soanbaigiang.smas.vn!";
				$status = 0;
				return $status.'|'.$sms;
			}
		}
		
		$data = $this->vservices->actionExecute('update', array('src'=>$src, 'username'=>$username, 'password'=>$password, 'fullname'=>null, 'phone'=>$username, 'token'=>$token), 'user');
		parse_str($data);
		switch((int)$status)
		{
			case 0:
				$us_id = $id;
				$user['created_time'] = date('Y-m-d H:i:s');
				$user['us_id'] = $us_id;
				$user['cellphone'] = $username;
				if (!is_null($collaborator) || $collaborator != ''){
					$user['collaborator'] = $collaborator;
				}
				$this->db->query('UNLOCK TABLES');
				$this->db->insert('tbluser', $user);
				$sms = "Chuc mung Qui vi da dang ky thanh cong tai khoan Soan Bai giang Online. Hay dang nhap vao soanbaigiang.smas.vn voi ten truy nhap ".$username.", mat khau ".$password." de su dung.";
				$status = 1;
				break;
			case 2:
			case 4:
				$sms = "So dien thoai cua Qui vi da duoc dang ky!";
				$status = 0;
				break;
			default:
				$status = 0;
				$sms = $errMsg;
				break;
		}
		
		return $status.'|'.$sms;
	}
	
	public function create_random_password()
	{
		//$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
		$alphabet = "0123456789";
		$pass = array();
		$alphaLength = strlen($alphabet) - 1;
		for ($i = 0; $i < 6; $i++) {
			$n = rand(0, $alphaLength);
			$pass[] = $alphabet[$n];
		}
		return implode($pass);
	}
	
	public function get_user_by_id($us_id)
	{
		$this->db->query('UNLOCK TABLES');
		$this->db->select('*')->from('tbluser')->where('us_id', $us_id);
		$query = $this->db->get();
		if($query->num_rows() > 0)
		{
			$row = $query->row_array();
			return $row;
		}
	}
	
	public function get_user_info($src, $token, $us_id)
	{
		$data = $this->vservices->actionExecute('getinfo', array('src' => $src, 'us_id' => $us_id, 'token'=>$token), 'user');
        return $data;
	}
	
	public function update_user($src, $token, $user, $us_id)
	{
		$data = $this->vservices->actionExecute('update', array('src'=>$src, 'token'=>$token, 'us_id'=>$us_id, 
																'password'=>$user['password'], 'fullname'=>$user['fullname'], 'gender'=>$user['gender'],
																'email'=>$user['email'], 'school'=>$user['school'], 'province'=>$user['province'], 'oldpass'=>$user['oldpass']),
												'user');
		return $data;
								
	}
	
	public function changeProfile($sentNumber, $username, $password, &$status='')
	{
		$user = array();
		$src = 'SBG';
		$errMsg = '';
		$sms = '';
		$result = $this->get_user_by_cellphone($username);
		if($result)
		{
			$us_id = $result['us_id'];
			$token = md5($us_id.self::TOKENPW);
			$data = $this->vservices->actionExecute('update', array('src'=>$src, 'token'=>$token, 'us_id'=>$us_id, 'username'=>$sentNumber, "password"=>$password, 'oldpass'=>$password, 'phone'=>$sentNumber), 'user');
			parse_str($data);
			switch((int)$status)
			{
				case 0:
					$us_id = $id;
					$user['updated_time'] = date('Y-m-d H:i:s');
					$user['us_id'] = $us_id;
					$user['cellphone'] = $sentNumber;
					$this->updateUser($us_id, $user);
					$sms = "Qui vi da doi so dien thoai tren soanbaigiang.smas.vn sang so dien thoai [".$sentNumber."]";
					$status = 1;
					break;
				case 5:
					$sms = "So dien thoai của Qui vi chua duoc dang ky!";
					$status = 0;
					break;
				case 6:
					$sms = "Mat khau cua qui vi khong dung !";
					$status = 0;
					break;
				default:
					$status = 0;
					$sms = $errMsg;
					break;				
			}
		}else
		{
			$sms = "So dien thoai của Qui vi chua duoc dang ky!";
			$status = 0;
		}
		return $status.'|'.$sms;
	}
	
	public function changePassword($username, $password, &$status = '')
	{
		$user = array();
		$src = 'SBG';
		$errMsg = '';
		$sms = '';
		$isForgotPassword = false;
		$pass = $password;
		if (is_null($password) || $password == '')
		{
			$pass = $this->create_random_password();
			$$isForgotPassword = true;
		}
		$result = $this->get_user_by_cellphone($username);
		if($result)
		{
			$us_id = $result['us_id'];
			$token = md5($us_id.self::TOKENPW);
			$data = $this->vservices->actionExecute('update', array('src'=>$src, 'token'=>$token, 'us_id'=>$us_id, "password"=>$pass), 'user');
			parse_str($data);
			switch((int)$status)
			{
				case 0:
					$us_id = $id;
					$user['updated_time'] = date('Y-m-d H:i:s');
					$this->updateUser($us_id, $user);
					if ($isForgotPassword)
					{
						$sms = "Mat khau moi cua quy vi tren soanbaigiang.smas.vn la [".$pass."]";
					}else{
						$sms = "Qui vi da doi thanh cong mat khau tren soanbaigiang.smas.vn.";
					}
					$status = 1;
					break;
				case 5:
					$sms = "So dien thoai của Qui vi chua duoc dang ky!";
					$status = 0;
					break;
				default:
					$status = 0;
					$sms = $errMsg;
					break;	
			}
		}
		else
		{
			$sms = "So dien thoai của Qui vi da duoc dang ky!";
			$status = 0;
		}
		return $status.'|'.$sms;
	}
	
	
	public function checkLicense ($userId) 
	{
		$isNotExpired = false;
		$userInfo = array();
		$userInfo = $this->get_user_by_id($userId);	

		$expireDate = $userInfo['expire_date'];
		
		if ((trim($expireDate) == '')) return $isNotExpired;
		
		$today = mktime();
		$expireTime = strtotime($expireDate.' 23:59:59');
		$isNotExpired = ($today < $expireTime);
		return $isNotExpired;
	}
	
	public function registerVip($username, $p_code)
	{
		$user = array();
		$sms = '';
		
		$result = $this->get_user_by_cellphone($username);
		$package = $this->get_package((int)$p_code);
		if($result){
			
			if ($result['acc_balanced'] >= $package['p_price'])
			{
				$us_id = $result['us_id'];
				$user['acc_balanced'] = $result['acc_balanced'] - $package['p_price'];
				if ($this->checkLicense($us_id)){
					$user['expire_date'] = date('Y-m-d', strtotime($result['expire_date'].' + '.$package['p_period'].' month'));
				}else
				{
					$user['expire_date'] = date('Y-m-d', strtotime('now + '.$package['p_period'].' month'));
				}
				
				$user['p_id'] = $package['p_id'];
				$user['updated_time'] = date('Y-m-d H:i:s');
				
				$this->updateUser($us_id, $user);
				$sms = "Chuc mung Qui vi da dang ky su dung Soan Bai giang truc tuyen tren soanbaigiang.smas.vn. Qui vi co the su dung dich vu den 24h00 ngay ".date('d/m/Y', strtotime($user['expire_date']));
				$status = 1;
			}else
			{
				$sms = "Tai khoan cua qui vi khong du de dang ky su dung dich vu Soan Bai giang truc tuyen tren soanbaigiang.smas.vn. Hay nap tien va dang ky lai. Cam on!";
				$status = 0;
			}
			
		}else{
			$sms = "Tai khoan [".$username."] chua dang ki tai khoan tren he thong SBG Online soanbaigiang.smas.vn.";
			$status = 0;
		}
		return $status.'|'.$sms;
	}
	
	public function rechargeAccount($username, $amount)
	{
		$user = array();
		$sms = '';
		$result = $this->get_user_by_cellphone($username);
		if($result)
		{
			$us_id = $result['us_id'];
			$user['acc_balanced'] = $result['acc_balanced'] + $amount;
			$user['updated_time'] = date('Y-m-d H:i:s');
			$this->updateUser($us_id, $user);
			$sms = "Qui vi da nap thanh cong ".$amount."VND vao tai khoan ".$username." tren soanbaigiang.smas.vn";
			$status = 1;
		}else
		{
			$sms = "Tai khoan ".$username." chua dang ki tai khoan tren he thong SBG Online soanbaigiang.smas.vn.";
			$status = 0;
		}
		return $status.'|'.$sms;		
	}
	
	public function get_user_by_cellphone($cellphone)
	{
		$this->db->query('UNLOCK TABLES');
		$sql = 'SELECT * FROM tbluser where cellphone = ? LIMIT 0,1';
		$query = $this->db->query($sql, array($cellphone));
		$row = $query->row_array();
		return $row;
	}
	
	public function isExistcollaborator($collaborator)
	{
		$this->db->query('UNLOCK TABLES');
		$this->db->select('*')->from('tblcollaborator')->where('login_name', $collaborator)->limit(1);
		$result = $this->db->get()->row_array();
		if ($result) return true; else return false;
	}
	
	public function updateUser($us_id, $data)
	{
		$this->db->query('UNLOCK TABLES');
		$this->db->where('us_id', $us_id);
		$this->db->update('tbluser', $data);
	}
	
	public function get_package($p_code)
	{
		$this->db->query('UNLOCK TABLES');
		$sql = 'SELECT * FROM tblservicepackage where p_code = ? LIMIT 0,1';
		$query = $this->db->query($sql, array($p_code));
		$row = $query->row_array();
		return $row;
	}
	
	public function insertSmslog($sentNumber, $serviceID, $commandcode, $info, $receiveTime)
	{
		if (preg_match('/^(84)([0-9]{9,10})$/', $sentNumber, $aryMatch) == 1) {
			$sentNumber = '0'. $aryMatch[2];
		}
		
		try {
			$user = $this->get_user_by_cellphone($sentNumber);
		}
		catch(Exception $e) {
			
		}
		
		$smslog = array();
		$smslog['sender'] = $sentNumber;
		$smslog['us_id'] = isset($user['us_id']) ? $user['us_id']:NULL;
		$smslog['service_id'] = $serviceID;
		$smslog['commandcode'] = $commandcode;
		$smslog['info'] = $info;
		$smslog['created_time'] = $receiveTime;
		$this->db->query('UNLOCK TABLES');
		$sql = 'INSERT INTO tblsmslog(sender, us_id, service_id, commandcode, info, created_time) VALUES(?,?,?,?,?,?)';
		$query = $this->db->query($sql, $smslog);
		//$this->db->insert('tblsmslog', $smslog);
	}
}
