<?php
/**
 *
 */
include_once(SERVER_ROOT."/model/mBase.php");


class mManage extends mBase {

    /**
     * 微信扫码登录
     * @param unknown $code
     * @param unknown $state
     * @return boolean|string[]|number[]
     */
    public function weixinLogin($code, $state) {
        if (empty($code)) {
            $this->setError("缺少回调参数code");
            return false;
        }

        if (empty($state)) {
            $this->setError("缺少回调参数state");
            return false;
        }

        // 获取access token
        $wxopenobj = new mWeixinOpen();
        $res = $wxopenobj->getAccessToken($code);
        if (!$res) {
            $this->setError($wxopenobj->getError());
            return false;
        }

        // 获取扫码登录用户信息
        $userinfo = $wxopenobj->getUserInfo($res['access_token'], $res['openid']);
        if (!$userinfo) {
            $this->setError($wxopenobj->getError());
            return false;
        }

        $uobj = new mUser();
        $agent_login_info = $uobj->getAdminUserByOpenid($res['openid']);
        if (empty($agent_login_info)) {
            $login_user_info = $uobj->getLoginUserByOpenid($res['openid']);
            if(empty($login_user_info)) $login_user_info = $uobj->addLoginUser(array('openid' => $res['openid']));

            if(empty($login_user_info)){
                $this->setError("注册失败");
                return false;
            }

            $this->setError("请联系管理员开启账号");
            return false;
        }

        if ($agent_login_info['status'] == 0) {
            $this->setError("账号已被禁用");
            return false;
        }

        $jwttoken = $this->getJwtToken(array('openid' => $res['openid']));
        if (empty($jwttoken)) {
            $this->setError($this->getError());
            return false;
        }

        $data = array();
        $data['jwttoken'] = $jwttoken;
        $data['openid'] = $res['openid'];

        return $data;
    }

    private function getJwtToken($jwtdata) {
        $jwtobj = new mJwt();
        $jwtobj->expire = 30*24*60*60;
        $jwttoken = $jwtobj->getJwtEncode($jwtdata);
        if (empty($jwttoken)) {
            $this->setError("登录失败|jwt");
            return false;
        }
        return $jwttoken;
    }
}