<?php
namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\Models\User;
use Validator;
use Redis;
use Dingo\Api\Exception\StoreResourceFailedException;
use DB;
use Log;
use App\Repositories\UserRes;
use App\Models\TeacherClass;
use App\Models\Classes;
class AuthController extends ApiController
{
    use AuthenticatesUsers;

    /**
     * @api {post} /user/login 登录
     * @apiName login
     * @apiGroup User
     * @apiParam {String} mobile 手机号
     * @apiParam {String} password 密码
     * @apiParam {String} type 1:家长 2:教师
     * @apiParam {String} push_id 极光push_id
     * @apiParam {String} imei 设备唯一号
     * @apiSuccess {String} token 用户唯一标识
     * @apiSuccess {String} is_vip 是否是VIP
     */
    function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'mobile' => 'required|max:11',
            'password' => 'required',
            'type' => 'required',
           // 'push_id' => 'required',
            //'imei' => 'required'
        ]);
        if ($validator->fails()) {
            Log::info(json_encode($request->all()));
            return $this->error(202, '参数有误');
        }
        $credentials = $this->credentials($request);
        
        if (! Auth::attempt($credentials)) {
            return $this->error(201, '用户名密码错误');
        }
        if (Auth::user()->type != $request->type) {
            return $this->error(204, '用户身份错误');
        }
       
        $token = md5(Auth::user()->id);
        Redis::set('UToken-' . $token, Auth::user()->id);
        $reData['token'] = $token;
        $reData['is_vip'] = Auth::user()->vip_expire > time() ? 1 : 0;
                // 删除此imei号绑定的所有push_id
        if(isset($request->imei) && $request->imei!='' && isset($request->push_id) && $request->push_id!=''){
            $imei = $request->imei;
            $pushId = $request->push_id;
            UserPushRelation::where('imei', $imei)->delete();
            $insData['user_id'] = Auth::user()->id;
            $insData['push_id'] = $pushId;
            $insData['imei'] = $imei;
            $insData['type'] = $request->type;
            UserPushRelation::create($insData);
        }else{
            \Log::info('缺少push_id,参数:'.json_encode($request->all()));
        }

        return $this->success($reData);
    }


    /**
     * @api {post} /user/logout 退出
     * @apiName logout
     * @apiGroup User
     * @apiPermission token
     */
    function logout(Request $request)
    {
        $request->token = $request->token;
        if (Redis::exists('UToken-' . $request->token))
           // Redis::del('UToken-' . $request->token);
        
        return $this->success();
    }

    /**
     * @api {post} /user/rePwd 修改密码
     * @apiName repassword
     * @apiGroup User
     * @apiParam {String} oldpassword 旧密码
     * @apiParam {String} password 新密码
     * @apiPermission token
     */
    function resetPassword(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'oldpassword' => 'required',
            'password' => 'required'
        ]);
        if ($validator->fails()) {
            return $this->error(202, '参数缺失');
        }
        $user = User::find($request->user_id);
        $data['mobile'] = $user->mobile;
        $data['password'] = $request->oldpassword;
        if (! Auth::attempt($data)) {
            return $this->error(205, '旧密码错误');
        }
        $user->password = bcrypt($request->password);
        $user->save();
        return $this->success();
    }

    /**
     * @api {post} /user/forgetPwd 找回密码
     * @apiName forgetPwd
     * @apiGroup User
     * @apiParam {String} mobile 手机号
     * @apiParam {String} password 密码
     * @apiPermission none
     */
    function forgetPassword(Request $request)
    {
        // 检查手机号是否注册
        $user = User::where('mobile', $request->mobile)->first();
        if (! $user)
            return $this->error(422, '该用户还未注册');
        // 检查验证码是否正确
        $user->password = bcrypt($request->password);
        $user->save();
        return $this->success();
    }

    /**
     * @api {post} /user/is-registerd 是否已经注册
     * @apiName is-registerd
     * @apiGroup User
     * @apiParam {String} mobile 手机号
     * @apiParam {int} type 用户类型 1:家长 2:教师
     * @apiPermission token
     * @apiSuccess {String} is_registerd 是否已经注册 1:已经注册 0:还未注册
     * @apiDescription 调用时机:1、注册 2、忘记密码
     */
    function isRegisterd(Request $request)
    {
        $this->validate($request, [
            'mobile' => 'required|Integer',
            'type' => 'required|Integer'
        ]);
        // 检查手机号是否注册
        $user = User::where('mobile', $request->mobile)->where('type', $request->type)->count();
        $data['is_registerd'] = $user;
        return $this->success($data);
    }
    function __construct(UserRes $userRes){
    	$this->userRes=$userRes;
	}
    function username()
    {
        return 'mobile';
    }
}
