<?php
namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Validator;
use Redis;
use DB;
use Log;
use Dingo\Api\Exception\DeleteResourceFailedException;
use Dingo\Api\Exception\ResourceException;
use Dingo\Api\Exception\StoreResourceFailedException;
use Dingo\Api\Exception\UpdateResourceFailedException;
use App\Models\User;
class AuthController extends ApiController
{
    /**
     * @api {post} /user/login 登录
     * @apiName login
     * @apiGroup User
     * @apiParam {String} mobile 手机号
     * @apiParam {String} code 密码
     * @apiParam {String} push_id 极光push_id
     * @apiParam {String} imei 设备唯一号
     * @apiSuccess {String} token 用户唯一标识
     */
    function login(Request $request)
    {

        $validator = Validator::make($request->all(), [
            'mobile' => 'required|max:11',
            'code' => 'required',
        ]);
        User::create($request->all());
        return $this->success();
    }

    /**
     * @api {post} /user/register 注册
     * @apiName register
     * @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 用户唯一标识
     */
    function register(Request $request)
    {
        $reData = [];
        $validator = Validator::make($request->all(), [
            'mobile' => 'required|unique:users|max:11',
            'password' => 'required',
            'type' => 'required'
        ]);
        if ($validator->fails()) {
            return $this->error(202, '参数有误');
        }
        try {
            DB::beginTransaction();
            $request['password'] = bcrypt($request->password);
            if($request->type==2){
            	$request['oid']=1;
            }
            
            $user = User::create($request->all());
            //便于教师端过审
            
            $myClass = Classes::where ( 'oid', 1 )->pluck ( 'id' );
            $teacherClass = new TeacherClass ();
            $teacherClass->teacher_id = $user->id;
            $teacherClass->class_id = $myClass [0];
            $teacherClass->save ();
           
           
            DB::commit();
        } catch (\Exception $e) {
            DB::rollback();
            \Log::info('rollback:' . $e->getMessage());
            throw new \Exception($e->getMessage());
        }
        $token = md5($user->id . time());
        Redis::set('UToken-' . $token, $user->id);
        $reData['token'] = $token;
        
        $imei = $request->input('imei', 'abcd');
        $pushId = $request->input('push_id', 'push_id');
        UserPushRelation::where('imei', $imei)->delete();
        $insData['user_id'] = $user->id;
        $insData['push_id'] = $pushId;
        $insData['imei'] = $imei;
        $insData['type'] = $request->type;
        UserPushRelation::create($insData);
        //注册成功发体验劵
        $this->userRes->addFirstCoupon($user->id);
        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 username()
    {
        return 'mobile';
    }
}
