<?php

namespace app\api\controller;

use app\common\controller\Api;
use app\common\library\Ems;
use app\common\library\Sms;
use fast\Http;
use fast\Random;
use think\Config;
use think\Db;
use think\Validate;

/**
 * 会员接口
 */
class User extends Api
{
    protected $noNeedLogin = ['third'];
    protected $noNeedRight = '*';

    public function _initialize()
    {
        parent::_initialize();

        if (!Config::get('fastadmin.usercenter')) {
            $this->error(__('User center already closed'));
        }

    }

    /**
     * 会员中心
     * @ApiReturn (
     *     data:{
     *      nickname 昵称
     *      avatar 头像
     *      pay 待支付
     *      wait_send 待发货
     *      wait_collect 待收货
     *      wait_comment 待评价
     *     }
     * )
     */
    public function index()
    {
        $data = [];
        $data['nickname'] = $this->auth->nickname;
        $data['avatar'] = cdnurl($this->auth->avatar,true);
        $data['mobile'] = $this->auth->mobile;
        $data['pay'] = Db::name('litestore_order')->where('user_id',$this->auth->id)->where('pay_status','10')->count();
        $data['wait_send'] = Db::name('litestore_order')->where('user_id',$this->auth->id)->where('freight_status','10')->count();
        $data['wait_collect'] = Db::name('litestore_order')->where('user_id',$this->auth->id)->where('receipt_status','10')->count();
        $data['wait_comment'] = Db::name('litestore_order')->where('user_id',$this->auth->id)->where('receipt_status','20')->count();
        $this->success('会员中心', ['welcome' => $this->auth->nickname]);
    }

    /**
     * 修改会员个人信息
     *
     * @ApiMethod (POST)
     * @param string $avatar   头像地址
     * @param string $mobile   联系方式
     * @param string $nickname 昵称
     */
    public function profile()
    {
        $user = $this->auth->getUser();
        $mobile = $this->request->post('mobile');
        $nickname = $this->request->post('nickname');
        $avatar = $this->request->post('avatar', '', 'trim,strip_tags,htmlspecialchars');
        if ($mobile) {
            $user->mobile = $mobile;
        }
        if ($nickname) {
            $user->nickname = $nickname;
        }
        if ($avatar) {
            $user->avatar = $avatar;
        }
        $user->save();
        $this->success();
    }


    /**
     * 第三方登录
     *
     * @ApiMethod (POST)
     * @param string $code     Code码
     * @param string $nickname 微信昵称
     * @param string $avatar   微信头像
     */
    public function third()
    {
        $code = $this->request->post('code');
        $nickname = $this->request->post('nickname');
        $avatar = $this->request->post('avatar');
        if (!$code || !$nickname || !$avatar){
            $this->error('后台所需参数缺失请完善参数');
        }
        $param = [];
        $param['js_code'] = $code;
        $param['grant_type'] = 'authorization_code';
        $param['secret'] = Config::get('site.secret');
        $param['appid'] = Config::get('site.appid');
        $wxapi = Http::get('https://api.weixin.qq.com/sns/jscode2session',$param);//请求openid
        $wxapi = json_decode($wxapi,true);
        if (isset($wxapi['errcode'])){
            $this->error($wxapi['errmsg']);
        }
        $third = new \app\api\model\Third();
        $userid = $third->where('openid',$wxapi['openid'])->value('user_id');
        if ($userid){
            $this->auth->direct($userid);
            $this->success('登录成功',['token'=>$this->auth->getToken(),'user_type'=>$this->auth->user_type]);
        }else{
            $userid = $this->auth->register($nickname,'','','',['avatar'=>$avatar]);
            if ($userid){
                $third->save(['openid'=>$wxapi['openid'],'user_id'=>$userid]);
                $this->success('登录成功',['token'=>$this->auth->getToken(),'user_type'=>$this->auth->user_type]);
            }else{
                $this->error('注册失败');
            }
        }
    }

    /**
     * @ApiTitle    (用户协议)
     * @ApiMethod   (POST)
     * @ApiReturn   ({
    'code':'1',
    'msg':'用户协议'
    'data':'富文本'
    })
     */
    public function userAgreement()
    {
        $this->success('用户协议', Config::get('site.user_agreement'));
    }

    /**
     * @ApiTitle    (隐私协议)
     * @ApiMethod   (POST)
     * @ApiReturn   ({
    'code':'1',
    'msg':'隐私协议'
    'data':'富文本'
    })
     */
    public function privacyAgreement()
    {
        $this->success('隐私协议', Config::get('site.privacy_agreement'));
    }
}