<?php

namespace App\Http\Controllers\Web\Person;

use App\Http\Controllers\Web\WebBaseController;
use App\Models\Task;
use App\Services\Common\CategoryService;
use App\Services\Common\EmailService;
use App\Services\Common\SmsService;
use App\Services\Person\MemberInfoService;
use App\Services\Person\MemberService;
use App\Services\Person\ResumeService;
use App\Validators\PersonValidatorRequest;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;

class MemberInfoController extends WebBaseController
{
    /**
     * @var MemberInfoService
     */
    protected $MemberInfoService;
    protected $MemberService;
    protected $smsService;
    protected $emailService;
    protected $categoryService;
    protected $resumeService;

    /**
     * MemberInfoController constructor.
     * @param MemberInfoService $MemberInfoService
     * @param MemberService $MemberService
     * @param SmsService $smsService
     * @param EmailService $emailService
     * @param CategoryService $categoryService
     * @param resumeService $resumeService
     */
    public function __construct(
        MemberInfoService $MemberInfoService,
        MemberService $MemberService,
        SmsService $smsService,
        EmailService $emailService,
        CategoryService $categoryService,
        ResumeService $resumeService
    )
    {
        $this->MemberInfoService = $MemberInfoService;
        $this->MemberService = $MemberService;
        $this->smsService = $smsService;
        $this->emailService = $emailService;
        $this->categoryService = $categoryService;
        $this->resumeService = $resumeService;
    }

    /**
     * @des 账号管理--基本资料.
     */
    public function memberInfo()
    {
        $resume_id = [];
        $resume = $this->resumeService->myResumeAjax(auth('web-member')->user());
        if (!$resume->isEmpty()) {
            $resume_id = array_column($resume->toArray(), 'id');
        }
        $res = $this->resumeService->getUserInfo(auth('web-member')->user(), $resume_id);
        $district = $this->categoryService->getDefaultDistrict();
        return view('app.person.member_info')->with([
            'content'=>$res->member,
            'defaultCity'=>$district->defaultCity,
            'memberInfo'=>$res,
        ]);
    }

    public function updateInfo(PersonValidatorRequest $request)
    {
        $user = $this->getLoginUser();
        $id = $request->id;
        $this->MemberInfoService->isOwn($id,$user);
        $res = $this->MemberInfoService->updateInfo(request()->all(), auth('web-member')->user());
        if ($res['code']) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse('更新失败', '', 400);
        }
    }

    /**
     * 我的头像。
     */
    public function head()
    {
        $res = $this->MemberInfoService->memberInfo(auth('web-member')->user());
        return view('app.person.user_head')->with(['content'=>$res['content']]);
    }

    public function uploadHead()
    {
        $res = $this->MemberInfoService->updateHead(request()->pic1, auth('web-member')->user());
        return response()->json($res);
    }

    /**
     * 账户安全。
     */
    public function memberSafe()
    {
        return view('app.person.member_safe', [
            'member'=> $this->MemberInfoService->memberSafe(auth('web-member')->user()),
            'qq'=> $this->MemberInfoService->qq(auth('web-member')->user(), [1]),
            'weixin'=> $this->MemberInfoService->weixin(auth('web-member')->user(), [2,3,4]),
        ]);
    }

    public function unbind(Request $request)
    {
        $res = $this->MemberInfoService->unbind(auth('web-member')->user(), $request->type);
        if ($res) {
            return $this->sendSuccessResponse('解绑成功!');
        } else {
            return $this->sendErrorResponse('解绑失败!', '', 400);
        }
    }

    /**
     * 登录日志。
     */
    public function memberLog(Request $request)
    {
        $content =  $this->MemberInfoService->getMemberLog(auth('web-member')->user(), $request->route());
        return view('app.person.member_log')->with(['content'=>$content]);
    }

    /**
     * 修改密码--试图。
     */
    public function passwordView()
    {
        return view('app.person.ajax.password');
    }

    public function passwordInfo(PersonValidatorRequest $request)
    {
        $res = $this->MemberInfoService->updatePassword($request->oldpassword,
            $request->password, $request->password1, auth('web-member')->user());
        return response()->json($res);
    }

    public function userMobile()
    {
        return view('app.person.ajax.mobile')->with([
            'content'=>$this->MemberService->getMemberById(auth('web-member')->user())]);
    }
    public function userEmail()
    {
        return view('app.person.ajax.email')->with([
            'content'=>$this->MemberService->getMemberById(auth('web-member')->user())]);
    }

    public function mobileAudit(PersonValidatorRequest $request)
    {
        $mobile = trim(request()->mobile);
        $id = trim(request()->id);
        if (!$this->MemberService->findByField($id, $mobile)->isEmpty()) {
            return $this->sendErrorResponse('该手机已经认证!', '', 400);
        }
        $this->smsService->sendAuthSms($mobile, 'sms_auth_check');
        return response()->json(['code'=>1]);
    }

    public function mobileAuditCode(PersonValidatorRequest $request)
    {
        $mobile = trim(request()->mobile);
        $verifycode = trim(request()->verifycode);
        $res = $this->smsService->checkAuthSms($mobile, 'sms_auth_check', $verifycode);
        if (!$res) {
            return $this->sendErrorResponse('验证码错误!', '', 400);
        }
        $res = $this->MemberInfoService->mobileAuditCode($mobile);
        if ($res['code']==1) {
            return $this->sendSuccessResponse($res['points']);
        } else {
            return $this->sendErrorResponse('手机认证失败!', '', 400);
        }
    }

    public function emailAudit(PersonValidatorRequest $request)
    {
        $email = trim(request()->email);
        $id = trim(request()->id);
        if (!$this->MemberService->findByEmail($id, $email)->isEmpty()) {
            return $this->sendErrorResponse('该邮箱已经认证!', '', 400);
        }
        $redis = Cache::getRedis();
        $value = $redis->get('user_email_'.$request->account);
        if(!$value){
            $value = 0;
        }
        if($value >= 5){
            $redis->expire('user_email_'.$request->account,900);
            return $this->sendErrorResponse("连续登录失败5次,请15分钟后再尝试!");
        }else{
            $value++;
            $redis->set('user_email_',$value);
        }
        $this->emailService->setAuthTag('personal')
            ->setCallback('App\Services\Person\MemberInfoService', 'sendAuthEmailHook', [$email, auth('web-member')->user()])
            ->sendAuthMail($email, EmailService::TEMPLATE_VALIDATION);
        return response()->json(['status'=>1]);
    }

    public function saveUsername()
    {
        return view('app.person.ajax.username');
    }

    public function updateUsername(PersonValidatorRequest $request)
    {
        $res = $this->MemberInfoService->updateUsername($request->username);
        if ($res) {
            return $this->sendSuccessResponse('修改成功!');
        } else {
            return $this->sendErrorResponse('修改失败!', '', 400);
        }
    }

    public function pms()
    {
        $res = $this->MemberInfoService->pms(auth('web-member')->user());

     /*   dd($res);*/
        return view('app.person.pms', ['pms'=>$res]);
    }

    public function checkPms()
    {
        $res = $this->MemberInfoService->checkPms(request()->id,auth('web-member')->user());
        if ($res['code']==1) {
            $html = view('app.person.ajax.check_pms', ['pms'=>$res['info']])->render();
            return json_encode(['code'=>1,'data'=>$html]);
        } else {
            $html = view('app.person.ajax.check_error', ['pms'=>$res['info']])->render();
            return json_encode(['code'=>0,'data'=>$html]);
        }
    }

    public function deletePms()
    {
        if (request()->method()=='GET') {
            $html = view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除选择的系统消息吗?'])->render();
            return $this->sendSuccessResponse($html);
        } else {
            $res = $this->MemberInfoService->deletePms(request()->id,auth('web-member')->user());
            if ($res) {
                return $this->sendSuccessResponse('删除成功!');
            } else {
                return $this->sendErrorResponse('删除失败!');
            }
        }
    }

    public function newPms()
    {
        $res = $this->MemberInfoService->newPms(request()->id, auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('系统信息查看成功!');
        } else {
            return $this->sendErrorResponse('消息已删除或不存在!');
        }
    }

    public function msg()
    {
        $res = $this->MemberInfoService->msg(auth('web-member')->user());
       // dd($res);
        return view('app.person.msg', ['content'=>$res]);
    }

    public function msgSend()
    {
        $res = $this->MemberInfoService->msgSend(auth('web-member')->user(), request()->all());
        if ($res) {
            return $this->sendSuccessResponse($res);
        } else {
            return $this->sendErrorResponse('回复失败!');
        }
    }

    public function msgDelete()
    {
        if (request()->method()=='POST') {
            $res = $this->MemberInfoService->msgDelete(request()->all());
            if ($res) {
                return $this->sendSuccessResponse('删除成功!');
            } else {
                return $this->sendErrorResponse('删除失败!');
            }
        } else {
            return view('app.person.ajax.resume_delete', ['tpis'=>'删除后将无法恢复,您确定要删除选择的咨询消息吗?']);
        }
    }

    public function invitation_reg()
    {
        $task = Task::find(14);
        $html = view('app.person.ajax.invitation_reg',['task'=>$task])->render();
        return $this->sendSuccessResponse($html);
    }

}