<?php
class Service_Login
{

	public static $_modelClass	= null;

    public static function getModelInstance()
    {
        if (is_null(self::$_modelClass)) {
            self::$_modelClass	= new Table_Customer();
        }
        return self::$_modelClass;
    }

    public static function add($row)
    {
        $model	= self::getModelInstance();
        return $model->add($row);
    }

    public static function update($row, $value, $field = "country_id")
    {
        $model	= self::getModelInstance();
        return $model->update($row, $value, $field);
    }

    public static function delete($value, $field = "country_id")
    {
        $model	= self::getModelInstance();
        return $model->delete($value, $field);
    }

    public static function getAll()
    {
        $model	= self::getModelInstance();
        return $model->getAll();
    }

    /**
     * 获取自定义SQL语句查询结果
     *
     * @access	public
     * @param   string	($field		待返回的字段，默认为所有)
     * @param   string	($condition	查询条件)
     * @param	mixed	($value		待转换查询字段值)
     * @return	mixed
     */
    public static function getCustomQuery($field = '*', $condition = '', $value = '')
    {
    	$model	= self::getModelInstance();
    	return $model->getCustomQuery($field, $condition, $value);
    }

    /**
     * 检查登陆信息
     *
     * @param	string		($username	登陆账号)
     * @param	string		($password	账号密码)
     * @return	mixed
     */
    public static function check($account, $password)
    {
    	//$msg	= '';
    	$info	= self::getCustomQuery('*', "where customer_email='$account' and customer_password='$password'");
        $return = array();
    	if (empty($info)) {
        /**
         * 在customer表中没有找到数据？等等，往account表中找找
         */
         $minor = Service_Account::getByCondition(array(
           'account_email' => $account,
           'account_password' => $password,
           //'account_status' => 1
         ));

         if ($minor && 1 === (int) $minor['account_status']) { // 在account表找到了
           /* 往account表标记一下，登录时间、IP */
           Service_Account::update(array(
             'logined_time' => date('Y-m-d H:i:s'),
             'logined_ip' => Common_Common::getIP()
           ), $minor['account_id']);

           /* 为程序的兼容性，去customer表取主账号的信息放进SESSION吧 */
           $customer = Service_Customer::getByField($minor['customer_id']);

           /* 加点料，说明此账号为子账号 */
           $customer['is_master'] = FALSE;
           $customer['account_id'] = $minor['account_id'];
           $customer['account_code'] = $minor['account_code'];
           $customer['account_name'] = $minor['account_name'];
           $customer['display_name'] = $minor['account_name'];

           /* 设置SESSION */
           self::setLoginInfo($customer);

           $return['ask'] = 1;
           $return['errorMsg'] = '';
         }
         elseif ($minor && 0 === (int) $minor['account_status']) { // 悲催，被主账号禁用了，提示一下吧
           $return['ask'] = 0;
           $return['errorMsg'] = '该账号已被主账号禁用';
         }
         else {
            $return['ask'] = "0";
            $return['errorMsg'] = '邮箱或密码错误！';
         }
    	} else {
    		$info	= $info[0];
			if(0 == $info['customer_status']){
				$return['ask'] = "0";
                $return['errorMsg'] = "您的账户未完成注册";
			}
			else if(1 == $info['customer_status']){
				$return['ask'] = "0";
                $return['errorMsg'] = "您的账户未审核";
			}
			else if(3 == $info['customer_status']){
				$return['ask'] = "0";
                $return['errorMsg'] = "您的账户已停用";
			}else{
				if ($info['reg_step'] < 3) {
					$current		= $info['reg_step']+1;
					$session		= new Zend_Session_Namespace('register');
					$session->data	= array(
							'id'		=> $info['customer_id'],
							'code'		=> $info['customer_code'],
							'email'		=> $info['customer_email'],
							'current'	=> $current
					);
					$return['ask'] = "-1";
					$return['errorMsg'] = "";
					$return['currenct'] = $current;
					return $return;
					/*die("<script>window.location.href='/register/step?current=$current';</script>");*/
				}
				self::setLoginInfo($info);
				self::updateLoginInfo($info['customer_id']);
				$return['ask'] = "1";
				$return['errorMsg'] = "";
				/*die("<script>window.location.href='/merchant';</script>");*/
			}
    	}
        return $return;
    }

    /**
     * 保存登陆信息
     *
     * @param	array		($result	账户信息)
     * @param	int			($keep		存储时间)
     * @return	void
     */
    public static function setLoginInfo($result, $keep = FALSE)
    {
    	$session	= new Zend_Session_Namespace('customerAuth');
    	$session->data	= array(
    		'id'		=> $result['customer_id'],
    		'code'		=> $result['customer_code'],
    		'firstname'	=> $result['customer_firstname'],
    		'lastname'	=> $result['customer_lastname'],    			
    		'email'		=> $result['customer_email'],
    		'status'	=> $result['customer_status'],
    		'company'	=> $result['customer_company_name'],
    		'lasttime'	=> $result['last_login_time'],
    		'customer_currency'=>$result['customer_currency'],
        /* 以下为子账号所需，可通过is_master = TRUE、account_id = 0来识别主账号 */
        'is_master' => isset($result['is_master']) ? $result['is_master'] : TRUE,
        'account_id' => isset($result['account_id']) ? $result['account_id'] : 0,
        'account_code' => isset($result['account_code']) ? $result['account_code'] : $result['customer_code'],
        'account_name' => isset($result['account_name']) ? $result['account_name'] : $result['customer_code'],
        'display_name' => isset($result['display_name']) ? $result['display_name'] : $result['customer_code'],
    	);
    	if (!empty($keep)) {
    		$session->setExpirationSeconds($keep);
    	}
    }

    /**
     * 更新登陆信息
     *
     * @param	int			($id		账户ID)
     * @return	void
     */
    public static function updateLoginInfo($id)
    {
    	$data	= array(
    		'last_login_time'	=> date('Y-m-d H:i:s')
    	);
    	return self::update($data, $id, 'customer_id');
    }
    
    /**
     * 获取登陆信息
     *
     * @return	array
     */
	public static function getLoginInfo()
	{
		$session	= new Zend_Session_Namespace('customerAuth');
		return $session->data;
	}
	
	/**
	 * 登陆状态
	 *
	 * @return	void
	 */
	public static function isLogin()
	{
		$info	= self::getLoginInfo();
		if(empty($info['id'])){
			self::outLogin();
		}
	}
	
	/**
	* 注销登陆
	*
	* @return	void
	*/
	public static function outLogin()
	{
		$session	= new Zend_Session_Namespace('customerAuth');
		$session->unsetAll();
		//Zend_Session::destroy();
		die("<script>window.location.href='/login';</script>");
	}
	
  /**
   * 获取当前登录用户的ID
   * 
   * 主要用于订单日志、产品日志、ASN日志等
   * 
   * @return integer 主账号返回0，子账号返回账号ID
   */
  public static function getUserId() {
    $user = new Zend_Session_Namespace('customerAuth');
    $user = isset($user->data) ? $user->data : array('is_master' => TRUE);

    return $user['is_master'] ? 0 : (int) $user['account_id'];
  }

  /**
   * 获取当前登录用户的ID
   *
   * 主要用于订单日志、产品日志、ASN日志等
   *
   * @return integer 主账号返回0，子账号返回账号ID
   */

}