<?php
/**
 * 个人中心
 */
namespace app\modules\engineer\v1\controllers;
use app\modules\common\Helper;
use app\modules\common\Verify;
use app\modules\logic\services\UserService;
use app\modules\logic\services\AccountService;
use app\modules\logic\services\WxBindService;
use app\modules\logic\model\NoticeModel;
use app\modules\logic\model\UsersModel;
use app\modules\logic\model\OrderModel;
use Yii;
use yii\web\Controller;

class UserController extends MiddleController {
	/**
	 * 返回
	 * @param $code
	 * @param string $info
	 * @param string $controller
	 * @param string $total
	 */
	protected function response($code, $info = '', $total = '', $controller = 'user') {
		return parent::response($code, $info, $total, $controller);
	}
    /**
     * [actionOnline 开启上线]
     * @apiDoc
     * @api     v1/user/online
     * @group   user
     * @name    开启上线
     * @desc    技师APP-开启上线
     * @method  POST
     * @param longitude string 用户经度  noreq
     * @param latitude string 用户纬度  noreq
     * @author JOHN.W
     * @version [1.0]
     * @return  json
         {
        "code": "000000",
        "msg": "上线成功",
        "info": ''
        }   
     */
	public function actionOnline(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $Users = new UsersModel();
        //查询用户是否在线
        $flag = $Users->getWidgetRow(['cols'=>['online_status','type'],'user_id'=>$this->user_id]);
        if((isset($flag) && $flag['online_status']==1) || (isset($flag) && $flag['type']=='shop')){
        	return $this->response('para_miss', '您已处于在线状态');
        }
        $redis = Yii::$app->redis;
        $redis_key = 'online:tech-info';

        //获取用户经纬度
        $data = ['online_status'=>1,'last_online_time'=>time()];
        $param = Helper::elements(['longitude','latitude'],$this->para,'');
        if(empty($param['longitude']) || empty($param['latitude'])){
            return $this->response('deal_false', '获取不到定位信息，上线失败');
        }
        if(!empty($param['longitude']) && !empty($param['latitude'])){
            $data['longitude'] = $param['longitude'];
            $data['latitude'] = $param['latitude'];
            $region = Helper::getAddress($param['longitude'],$param['latitude']);
            $region_ids = Helper::GetProvinceCityByName($region['province'],$region['city'],$region['district']);
            if(!empty($region_ids)){
                $data['prov_id'] = isset($region_ids['prov_id'])?$region_ids['prov_id']:0;
                $data['city_id'] = isset($region_ids['city_id'])?$region_ids['city_id']:0;
                $data['area_id'] = isset($region_ids['district_id'])?$region_ids['district_id']:0;
            }
        }
        $redis_data = isset($region)?array_merge($data,$region):$data;
        $redis->hset($redis_key, $this->user_id, json_encode($redis_data));
        $res = $Users->saveUs($data,$this->user_id);
        if($res){
            return $this->response('deal_succ',"上线成功");
        }else{
            return $this->response('deal_false',"上线失败");
        }
	}
	/**
     * [actionOffline 开启下线]
     * @apiDoc
     * @api     v1/user/offline
     * @group   user
     * @name    下线
     * @desc    技师APP-下线
     * @method  POST
     * @author JOHN.W
     * @version [1.0]
     * @return  json
         {
        "code": "000000",
        "msg": "下线成功",
        "info": ''
        }   
     */
	public function actionOffline(){
		if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $Users = new UsersModel();
        //查询用户是否在线
        $flag = $Users->getWidgetRow(['cols'=>['online_status','type','last_online_time','online_times'],'user_id'=>$this->user_id]);
        if((isset($flag) && $flag['online_status']==0) || (isset($flag) && $flag['type']=='shop')){
        	return $this->response('para_miss', '您已处于下线状态');
        }
        $redis = Yii::$app->redis;
        $redis_key = 'online:tech-info';
        if ($redis->hexists($redis_key, $this->user_id)) {
            $redis->hdel($redis_key, $this->user_id);
        }
        $res = $Users->saveUs(['online_status'=>0,'online_times'=>(time()-$flag['last_online_time'])+$flag['online_times']],$this->user_id);
        if($res){
            return $this->response('deal_succ',"下线成功");
        }else{
            return $this->response('deal_false',"下线失败");
        }
	}
	/**
     * @apiDoc
     * @api v1/user/accesstoken
     * @name 微信获取accesstoken
     * @desc 微信获取accesstoken
     * @group user
     * @method POST
     * @param authorization_code string 授权码 req
     * @param state string 验证码 req
     * @return json
     * {
     * "code": "000000",
     * "msg": "绑定成功",
     * "info": ""
     * }
     */
    public function actionAccesstoken()
    {
        if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标识');
        }
        if (empty($this->para['authorization_code'])) {
            return $this->response('para_miss', '授权码');
        }
        if (empty($this->para['state'])) {
            return $this->response('para_miss', '验证码不能为空');
        }
        $bind_service = new WxBindService($this->user_id);
        if ($bind_service->user_bind) {
            return $this->response('para_miss', '用户已经绑定');
        }
        $bind_result = $bind_service->bindUser($this->user_id, $this->para['authorization_code'], $this->para['state']);
        if (is_bool($bind_result) and $bind_result) {
            return $this->response('deal_succ', '绑定成功');
        } else {
            return $this->response('deal_false', $bind_result);
        }
    }
    /**
     * @apiDoc
     * @api v1/user/unbind
     * @name 用户解绑
     * @desc 用户解绑
     * @group user
     * @method POST
     * @return json
     *{
     * "code": "000000",
     * "msg": "解绑成功"
     * }
     */
    public function actionUnbind()
    {
        if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $wx_service = new WxBindService($this->user_id);
        if ($wx_service->user_bind) {
            $wx_service->unbind();
        }
        return $this->response('deal_succ', '解绑成功');
    }
    /**
     * [actionOrstat 订单统计]
     * @apiDoc
     * @api    v1/user/orstat
     * @group  user
     * @name   订单统计
     * @desc   技师APP-个人中心-订单统计
     * @method POST
     * @param star_time string 开始时间【Y-m-d】 noreq
     * @param end_time string 结束时间【Y-m-d】 noreq
     * @return json
        {
        "code": "000000",
        "msg": "获取成功",
        "info": {
        "data": {
            "total_income": "0.00",
            "work_income": "0.00",
            "activity_income": "0.00",
            "other_income": "0.00",
            "comp_num": "0",
            "cancel_num": "0",
            "abn_num": "0"
        },
        "list": [
            {
                "order_id": "1",
                "nid": "201909132334265050535098426",
                "pro_extra": "1",
                "price": "18.00",
                "status": "5",
                "pro_extra_show": {
                    "show_name": [
                        "美容-保养"
                    ],
                    "total": 1
                },
                "status_show": "已完成"
            }
        ]
        }
        } 
     */
    public function actionOrstat(){
        if (empty($this->user_id)) {
            return $this->response('para_miss_user', '未能识别用户标志');
        }
        $ret = [
            'data'=>[
                'total_income'=>'0.00',
                'work_income'=>'0.00',
                'activity_income'=>'0.00',
                'other_income'=>'0.00',
                'comp_num'=>'0',
                'cancel_num'=>'0',
                'abn_num'=>'0',
            ],
            'list'=>[]
        ];
        $Order = new OrderModel();
        $model = $Order->find()->select(['{{%order}}.order_id','nid','pro_extra','price','tech_price','status'])->leftJoin("{{%order_info}}", '{{%order}}.`order_id` = {{%order_info}}.`order_id`')->where(['re_user_id'=>$this->user_id])->andWhere(['in','status',['4','5']]);
        if(isset($this->para['star_time']) && !empty($this->para['star_time'])){
            $star_time = strtotime($this->para['star_time']);
            $model->andWhere(['>=','re_time',$star_time]);
        }
        if(isset($this->para['end_time']) && !empty($this->para['end_time'])){
            $end_time = strtotime("+1 day",strtotime($this->para['end_time']));
            $model->andWhere(['<','re_time',$end_time]);
        }
        $list = $model->orderby("order_id desc")->asArray()->all();
        foreach ($list as &$value) {
                    $value['pro_extra_show']= Helper::getProExtraNameById($value['pro_extra'],true);
                    $value['status_show'] = Helper::getOrderSta($value['status']);
                    $value['price'] = $value['tech_price'];
                }
        $ret['list'] = $list ;    
        return $this->response('deal_succ', '获取成功',$ret);
    }
}