<?php

namespace app\api\controller;

use app\common\controller\Api;
use app\common\model\Item;
use app\common\model\RadarScore;
use app\common\model\Study;
use app\common\model\StudyScoreLog;
use app\common\model\Team;
use think\Db;
use think\Exception;
use think\exception\PDOException;

/**
 * 绑定资质
 * @ApiWeigh (96)
 */
class Bind extends Api
{
    protected $noNeedLogin = [''];
    protected $noNeedRight = ['*'];


    /**
     * @ApiTitle (输入手环ID绑定信息)
     * @ApiMethod (POST)
     * @ApiParams   (name="unique", type="string", required=true, description="手环id")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {}
    })
     */
    public function inUnique()
    {
        $unique = $this->request->param('unique');
        $user = $this->auth->getUserinfo();
        if (empty($unique)) {
            $this->error('参数错误', ['status' => 2]);
        }
        $res = \db('study')->where('unique',$unique)->value('user_id');
        if (!empty($res)){
            $this->error('当前学生已经被绑定了');
        }
        $is_bind = db('user')->where('id', $user['id'])->value('bind_study');
        if ($is_bind == 1) {
            $this->error('您当前已经绑定过学生了,请勿重复操作', $is_bind);
        }
        Db::startTrans();
        try {
            db('study')
                ->where('unique', $unique)
                ->update([
                    'user_id' => $user['id'],
                    'updatetime' => time()
                ]);
            \db('user')
                ->where('id', $user['id'])
                ->update([
                    'bind_study' => 1,
                    'updatetime' => time()
                ]);
            Db::commit();
        } catch (Exception $e) {
            Db::rollback();
            $this->error('参数错误', $e->getMessage());
        }
        $data = db('study')->where('unique', $unique)->field('id,grade,name')->find();
        $this->success('绑定成功',$data);
    }

    /**
     * @ApiTitle (扫码绑定信息)
     * @ApiMethod (POST)
     * @ApiParams   (name="unique", type="string", required=true, description="手环id[条形码编号]")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {}
    })
     */
    public function scanCode()
    {
        $unique = $this->request->param('unique');
        $user = $this->auth->getUserinfo();
        if (empty($unique)) {
            $this->error('参数错误', ['status' => 2]);
        }
        $res = \db('study')->where('unique',$unique)->value('user_id');
        if (!empty($res)){
            $this->error('当前学生已经被绑定了');
        }
        $is_bind = db('user')->where('id', $user['id'])->value('bind_study');
        if ($is_bind == 1) {
            $this->error('您当前已经绑定过学生了,请勿重复操作', $is_bind);
        }
        Db::startTrans();
        try {
            db('study')
                ->where('unique', $unique)
                ->update([
                    'user_id' => $user['id'],
                    'updatetime' => time()
                ]);
            \db('user')
                ->where('id', $user['id'])
                ->update([
                    'bind_study' => 1,
                    'updatetime' => time()
                ]);
            Db::commit();
        } catch (Exception $e) {
            Db::rollback();
            $this->error('参数错误', $e->getMessage());
        }
        $data = db('study')->where('unique', $unique)->field('id,grade,name')->find();
        $this->success('绑定成功', $data);
    }

    /**
     * @ApiTitle (项目管理[老师])
     * @ApiMethod (POST)
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {
    "id": 项目id,
    "title": "项目名称",
    }
    })
     */
    public function teachItem()
    {
        $user = $this->auth->getUserinfo();
        $data = db('item')
            ->where('user_id', $user['id'])
            ->field('id,title')
            ->select();
        if (empty($data)) {
            $this->error('当前还未关联项目', ['status' => 2]);
        }
        $this->success('获取项目成功', $data);
    }

    /**
     * @ApiTitle (学生校区)
     * @ApiMethod (POST)
     * @ApiReturn ({
    "code": "状态码",
    "msg": "获取校区成功",
    "time": "时间",
    "data": [
    {
    "campus_id": "校区id",
    "campus_title": "校区名称"
    }
    ]
    })
     */
    public function studyCampus(){
        $user = $this->auth->getUserinfo();
        $sid = db('study')
            ->where('user_id', $user['id'])
            ->value('id');
        $data = \db('study_score_log l')
            ->distinct('campus_ids')
            ->join('campus c','c.id = l.campus_ids')
            ->where('study_id',$sid)
            ->field('campus_ids,c.title as campus_title')
            ->select();
        if (empty($data)){
            $this->error('当前学生还未有项目关联校区',['status'=>2]);
        }
        $this->success('获取校区成功', $data);

    }

    /**
     * @ApiTitle (活动现场[扫码])
     * @ApiMethod (POST)
     * @ApiParams   (name="id", type="string", required=true, description="项目id")
     * @ApiParams   (name="unique", type="string", required=true, description="条形码唯一标识")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {
    "name": "姓名",
    "gender": "性别",
    }
    })
     */
    public function scanBarCode()
    {
        $id = $this->request->param('id');
        $unique = $this->request->param('unique');
        if (empty($unique) && empty($id)) {
            $this->error('参数错误', ['status' => 2]);
        }
        $model = new StudyScoreLog();
        $model->addScore($id,$unique);
        $data = db('study')->where('unique', $unique)->field('name,gender')->find();
        if ($data['gender'] == 1){
            $data['gender'] = '男';
        }else{
            $data['gender'] = '女';
        }
        $this->success('扫码成功', $data);
    }

    /**
     * @ApiTitle (活动现场[手动输入])
     * @ApiMethod (POST)
     * @ApiParams   (name="id", type="string", required=true, description="项目id")
     * @ApiParams   (name="unique", type="string", required=true, description="条形码唯一标识")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {
    "name": "姓名",
    "gender": "性别",
    }
    })
     */
    public function inputBar()
    {
        $id = $this->request->param('id');
        $unique = $this->request->param('unique');
        if (empty($unique) && empty($id)) {
            $this->error('参数错误', ['status' => 2]);
        }
        $model = new StudyScoreLog();
        $model->addScore($id,$unique);
        $data = db('study')->where('unique', $unique)->field('name,gender')->find();
        if ($data['gender'] == 1){
            $data['gender'] = '男';
        }else{
            $data['gender'] = '女';
        }
        $this->success('扫码成功', $data);
    }

    /**
     * @ApiTitle (绑定后获取头像昵称)
     */
    public function study(){
        $user = $this->auth->getUserinfo();
        $sid = \db('study')->where('user_id', $user['id'])->value('id');
        //获取学生的信息
        $data = \db('study')->where('id', $sid)->field('avatar,name,earn_score')->find();
        $data['avatar'] = cdnurl( $data['avatar'], true);
        $this->success('',$data);
    }

    /**
     * @ApiTitle (获取学生信息)
     * @ApiMethod (POST)
     * @ApiParams   (name="cid", type="string", required=true, description="校区id")
     * @ApiReturn   ({
    "code":"状态码",
    "msg": "提示消息",
    "data": {
    "avatar": "学生头像",
    "name": "学生名称",
    "earn_score": "学生获得分数"
    "item": 雷达图项目{
    "total": 1,
    "per_page": 3,
    "current_page": 1,
    "last_page": 1,
    "data": [
    {
    "item_id": 项目id,
    "sum_score": "项目分数",
    "title": "维度名称"
    },
    ]
    },}
    })
     */
    public function getScore()
    {
        $user = $this->auth->getUserinfo();
        $cid = $this->request->param('cid');
        $sid = \db('study')->where('user_id', $user['id'])->value('id');
        //获取学生的信息
        $data = \db('study')->where('id', $sid)->field('avatar,name,earn_score')->find();
        $data['avatar'] = cdnurl($data['avatar'], true);
        //获取雷达维度
        //halt($sid);
        $model = new RadarScore();
        $data['item'] = $model->whereIn('campus_ids',$cid)->where('study_id',$sid)->field('radar_id,score')
        ->paginate(9,false)
        ->each(function ($item,$key){
            $item['radar'] = \db('radar')->where('id',$item['radar_id'])->value('title');
            $item['score'] = $item['score'];
            return $item;
        });
        $this->success('获取成功', $data);
    }

}