<?php

namespace App\Http\Controllers\Mobile\Person;

use App\Http\Controllers\Mobile\MobileBaseController;
use App\Models\LotteryWin;
use App\Models\Pms;
use App\Models\RecuperateApply;
use App\Models\RecuperateLog;
use App\Models\RecuperateTime;
use App\Models\Resume;
use App\Services\Common\EmailService;
use App\Services\Common\PayService;
use App\Services\Common\SmsService;
use App\Services\Company\CompanyInterviewService;
use App\Services\Jobfair\JobfairPersonalJopApplyService;
use App\Services\Person\MemberInfoService;
use App\Services\Person\MemberPointService;
use App\Services\Person\MemberService;
use App\Services\Person\PersonFavoriteService;
use App\Services\Person\PersonJobsApplyService;
use App\Services\Person\ResumePrivacyService;
use App\Services\Person\ResumeService;
use App\Services\Recuperate\RecuperateApplyService;
use App\Validators\PersonValidatorRequest;
use Illuminate\Http\Request;

class CompanyInterviewController extends MobileBaseController
{
    /**
     * @var ResumeService
     */
    protected $ResumeService;
    protected $ResumePrivacyService;
    protected $companyInterviewService;
    protected $personalJobsApplyService;
    protected $memberPointService;
    protected $personFavoriteService;
    protected $memberInfoService;
    protected $memberService;
    protected $smsService;
    protected $emailService;
    protected $payService;
    protected $jobfairPersonalJopApplyService;
    protected $recuperateApplyService;

    public function __construct(
        ResumeService $ResumeService,
        ResumePrivacyService $ResumePrivacyService,
        CompanyInterviewService $companyInterviewService,
        PersonJobsApplyService $personalJobsApplyService,
        MemberPointService $memberPointService,
        PersonFavoriteService $personFavoriteService,
        MemberInfoService $memberInfoService,
        MemberService $memberService,
        SmsService $smsService,
        EmailService $emailService,
        PayService $payService,
        JobfairPersonalJopApplyService $jobfairPersonalJopApplyService,
        RecuperateApplyService $recuperateApplyService
    )
    {
        $this->ResumeService                  = $ResumeService;
        $this->ResumePrivacyService           = $ResumePrivacyService;
        $this->companyInterviewService        = $companyInterviewService;
        $this->personalJobsApplyService       = $personalJobsApplyService;
        $this->memberPointService             = $memberPointService;
        $this->personFavoriteService          = $personFavoriteService;
        $this->memberInfoService              = $memberInfoService;
        $this->memberService                  = $memberService;
        $this->smsService                     = $smsService;
        $this->emailService                   = $emailService;
        $this->payService                     = $payService;
        $this->jobfairPersonalJopApplyService = $jobfairPersonalJopApplyService;
        $this->recuperateApplyService         = $recuperateApplyService;
    }

    public function jobsInterview(Request $request)
    {
        $resume    = $this->ResumeService->myResumeAjax(auth('web-member')->user());
        $interview = $this->companyInterviewService->getInterviewByUid(auth('web-member')->user(), $request->all());
        if ($request->ajax()) {
            if ($interview['interview']->lastPage() < $interview['interview']->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_jobs_interview',
                    [
                        'resume'    => $resume,
                        'interview' => $interview['interview'],
                    ])->render(),
                'params' => $interview['params'],
            ]);
        }

        return view('mobile.app.person.jobs_interview', [
            'resume'    => $resume,
            'interview' => $interview['interview'], 'count' => $interview['count'], 'params' => $interview['params'],
            'wap_title' => '面试邀请']);
    }

    public function delInterview(Request $request)
    {
        $res = $this->companyInterviewService->delInterview($request->id, auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('删除成功');
        } else {
            return $this->sendErrorResponse('删除失败');
        }
    }

    public function setInterview(Request $request)
    {
        $res = $this->companyInterviewService->setInterview($request->id, auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('设置成功');
        } else {
            return $this->sendErrorResponse('设置失败');
        }
    }

    public function attentionMe(Request $request)
    {
        $resume = $this->ResumeService->myResumeAjax(auth('web-member')->user());
        $res    = $this->ResumeService->attentionMe(auth('web-member')->user(), $request->all());
        if ($request->ajax()) {
            if ($res['content']->lastPage() < $res['content']->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_attention_me',
                    [
                        'resume'  => $resume,
                        'content' => $res['content'],
                    ])->render(),
                'params' => $res['params']]);
        }
        return view('mobile.app.person.attention_me', [
            'content'   => $res['content'],
            'resume'    => $resume,
            'params'    => $res['params'],
            'wap_title' => '谁看过我',
        ]);
    }

    public function delAttention()
    {
        $res = $this->ResumeService->delAttention(request()->id, auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('删除成功');
        } else {
            return $this->sendErrorResponse('删除失败');
        }
    }

    public function jobsApply(Request $request)
    {
        $resume    = $this->ResumeService->myResumeAjax(auth('web-member')->user());
        $applyJobs = $this->personalJobsApplyService->getJobsApply(auth('web-member')->user(), $request->all());
        if ($request->ajax()) {
            if ($applyJobs['applyJobs']->lastPage() < $applyJobs['applyJobs']->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_jobs_apply',
                    [
                        'resume'    => $resume,
                        'applyJobs' => $applyJobs['applyJobs'],
                    ])->render(),
                'params' => $applyJobs['params']]);
        }
        return view('mobile.app.person.jobs_apply', [
            'resume'    => $resume,
            'applyJobs' => $applyJobs['applyJobs'],
            'count'     => $applyJobs['count'],
            'params'    => $applyJobs['params'],
            'wap_title' => '求职反馈',
        ]);
    }

    public function order_list(Request $request)
    {
        $res = $this->memberPointService->order_list(auth('web-member')->user(), $request->all());
        if ($request->ajax()) {
            if ($res['order']->lastPage() < $res['order']->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_order_list',
                    [
                        'order' => $res['order'],
                    ])->render(),
                'params' => $res['params']]);
        }
        return view('mobile.app.person.service.order_list', [
            'order'     => $res['order'],
            'params'    => $res['params'],
            'wap_title' => '我的订单',
        ]);
    }


    public function order_detail(Request $request)
    {
        $res = $this->memberPointService->order_detail($request->id, auth('web-member')->user());
        return view('mobile.app.person.service.order_detail', ['order' => $res, 'wap_title' => '订单详情']);
    }


    public function order_cancel(Request $request)
    {
        $res = $this->memberPointService->order_cancel($request->id, auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse('取消成功!');
        } else {
            return $this->sendErrorResponse('取消失败!');
        }
    }


    public function jobsF(Request $request)
    {
        $res     = $this->personFavoriteService->jobsF(auth('web-member')->user());
        $resumes = $this->ResumeService->myResumeAjax(auth('web-member')->user());
        if ($request->ajax()) {
            if ($res->lastPage() < $res->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_jobsF', ['content' => $res])->render()]);
        }
        return view('mobile.app.person.jobs_favorites', ['content' => $res, 'resumes' => $resumes, 'wap_title' => '职位收藏夹']);
    }

    public function resumeApply()
    {
        $res = $this->personFavoriteService->resumeApply(request()->all(), auth('web-member')->user());
        if ($res['code'] == 1) {
            return $this->sendSuccessResponse($res['info']);
        } else {
            return $this->sendErrorResponse($res['info']);
        }
    }

    public function resumeApplyAjax()
    {
        $res        = $this->ResumeService->myResumeAjax(auth('web-member')->user());
        $def_resume = Resume::where(['uid' => auth('web-member')->user()->id, 'def' => 1])->first();
        $html       = view('mobile.app.person.ajax_tpl.ajax_apply_job', ['resumes' => $res, 'def_resume' => $def_resume])
            ->render();
        return $this->sendSuccessResponse($html);
    }

    public function attentionCom(Request $request)
    {
        $res = $this->personFavoriteService->attentionCom(auth('web-member')->user());
        if ($request->ajax()) {
            if ($res->lastPage() < $res->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_attention_com', ['content' => $res])->render()]);
        }
        return view('mobile.app.person.attention_com', ['content' => $res, 'wap_title' => '关注的企业']);
    }

    public function shieldCompany()
    {
        $shieldCompany = $this->ResumePrivacyService->getShieldCompany(auth('web-member')->user());
        return view('mobile.app.person.shield_company', ['shieldCompany' => $shieldCompany, 'wap_title' => '屏蔽企业']);
    }

    public function saveShieldCompany()
    {
        $res = $this->ResumePrivacyService->saveShieldCompany(request()->company_id, auth('web-member')->user());
        if ($res) {
            return $this->sendSuccessResponse($res);
        } else {
            return $this->sendErrorResponse('企业关键字添加失败', '', 400);
        }
    }

    public function memberSafe()
    {
        return view('mobile.app.person.per_security', [
            'member'    => $this->memberInfoService->memberSafe(auth('web-member')->user()),
            'wap_title' => '账号安全',
        ]);
    }

    public function bind()
    {
        $qq     = $this->memberInfoService->qq(auth('web-member')->user(), [1]);
        $weixin = $this->memberInfoService->weixin(auth('web-member')->user(), [2, 3, 4]);
        return view('mobile.app.person.per_binding', ['wap_title' => '账号绑定', 'qq' => $qq, 'weixin' => $weixin]);
    }

    public function perSecTel()
    {
        return view('mobile.app.person.per_security_tel', ['wap_title' => '手机认证']);
    }

    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 perSecEmail()
    {
        return view('mobile.app.person.per_security_email', ['wap_title' => '邮箱认证']);
    }

    public function emailAudit()
    {
        $email = trim(request()->email);
        $id    = trim(request()->id);
        if (!$this->memberService->findByEmail($id, $email)->isEmpty()) {
            return $this->sendErrorResponse('该邮箱已经认证!', '', 400);
        }
        $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 perSecPwd()
    {
        return view('mobile.app.person.per_security_pwd', ['wap_title' => '修改密码']);
    }

    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 memberLog(Request $request)
    {
        $content = $this->memberInfoService->getMemberLog(auth('web-member')->user(), $request->route());
        if ($request->ajax()) {
            if ($content['last_page'] < $content['current_page']) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_member_log', ['content' => $content])->render()]);
        }
        return view('mobile.app.person.per_security_log')->with(['content' => $content, 'wap_title' => '会员登录日志']);
    }

    public function pms(Request $request)
    {
        if ($request->type == 1) {
            $res = $this->memberInfoService->mobileMsg(auth('web-member')->user());
            if ($request->ajax()) {
                if ($res->lastPage() < $res->currentPage()) {
                    return response()->json(['status' => 0]);
                }
                return response()->json([
                    'status' => 1,
                    'data'   => view('mobile.app.person.ajax_tpl.ajax_pms_type', ['pms' => $res])->render()]);
            }
        } else {
            $res = $this->memberInfoService->pms(auth('web-member')->user());
            if ($request->ajax()) {
                if ($res->lastPage() < $res->currentPage()) {
                    return response()->json(['status' => 0]);
                }
                return response()->json([
                    'status' => 1,
                    'data'   => view('mobile.app.person.ajax_tpl.ajax_pms', ['pms' => $res])->render()]);
            }
        }
        return view('mobile.app.person.pms_list', ['pms' => $res, 'wap_title' => '消息提醒']);

    }

    public function pmsShow(Request $request)
    {
        $res = Pms::find($request->id);
        return view('mobile.app.person.pms_show', ['pms' => $res, 'wap_title' => '系统消息']);
    }

    public function feedback()
    {
        return view('mobile.app.person.feedback', ['wap_title' => '意见反馈']);
    }

    public function feedbackCreate(Request $request)
    {
        $res = $this->memberInfoService->feedbackCreate($request->all());
        if ($res) {
            return $this->sendSuccessResponse('提交成功!');
        } else {
            return $this->sendErrorResponse('提交失败!', '', 400);
        }
    }

    public function msg(Request $request)
    {
        $res = $this->memberInfoService->mobileMsgShow(
            auth('web-member')->user(), $request->parent_id);
        if ($request->ajax()) {
            if ($res['res']->lastPage() < $res['res']->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_msg_show', ['msg' => $res['res']])->render()]);
        }
        return view('mobile.app.person.msg', ['msg' => $res['res'], 'company' => $res['company'], 'wap_title' => '留言咨询']);
    }

    public function personJobfair(Request $request)
    {
        $jobApply = $this->jobfairPersonalJopApplyService->personJobfair();
        if ($request->ajax()) {
            if ($jobApply['interview']->lastPage() < $jobApply['interview']->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.jobfair',
                    ['content' => $jobApply['interview']])->render()]);
        }
        return view('mobile.app.person.service.jobfair', ['content' => $jobApply['interview'], 'wap_title' => '招聘会']);
    }


    public function msgSend(Request $request)
    {
        $res = $this->memberInfoService->msgSend(auth('web-member')->user(), request()->all());
        if ($res) {
            return $this->sendSuccessResponse('留言成功!');
        } else {
            return $this->sendErrorResponse('留言失败!', '', 400);
        }
    }

    public function incrementStickSave()
    {
        $result = $this->ResumeService->incrementStickSave(request()->all(), auth('web-member')->user());
        if ($result['code'] == 1) {
            return $this->sendSuccessResponse($result['info']);
        } else {
            return $this->sendErrorResponse($result['info'], '', 400);
        }
    }


    public function incrementAddSave()
    {
        $result = $this->ResumeService->incrementAddSave(request()->all(), auth('web-member')->user());
        if ($result['code'] == 1) {
            return $this->sendSuccessResponse($result['info']);
        } else {
            return $this->sendErrorResponse($result['info'], '', 400);
        }
    }

    public function pay(Request $request)
    {
        $order   = $this->memberPointService->pay($request->all(), auth('web-member')->user());
        $tradeNo = $this->payService->getTradeNo($order['order']->id);
        $res     = $this->memberPointService->updateOrder($tradeNo, $order['input'], $order['order'], $request->route());
        if ($res['code'] == 'wechat') {
            if ($res['type'] == 'wap') {
                return $res['tradeCode'];
            } elseif ($res['type'] == 'official') {
                return json_encode(['tradeCode' => $res['tradeCode']]);
            } else {
                return json_encode(['tradeCode' => $res['tradeCode'], 'tradeNo' => $res['tradeNo']]);
            }
        } else {
            return $res['tradeCode'];
        }
    }

    public function payStatus(Request $request)
    {
        $res = $this->memberPointService->payStatus($request->tradeNo);
        if ($res) {
            return json_encode(['code' => 1]);
        } else {
            return json_encode(['code' => 0]);
        }
    }

    public function payAgain(Request $request)
    {
        $res = $this->memberPointService->payAgain(request()->id, $request->route());
        if ($res['code'] == 'wechat') {
            if ($res['type'] == 'wap') {
                return $res['tradeCode'];
            } else {
                return json_encode(['tradeCode' => $res['tradeCode'], 'tradeNo' => $res['tradeNo']]);
            }
        } else {
            return $res['tradeCode'];
        }
    }

    /**
     * 疗养套餐报名列表
     */
    public function recuperate(Request $request)
    {
        $res = $this->recuperateApplyService->list($request->input('status',null),$request->input('year',null), 8, ['recuperate']);
//        $year_arr=RecuperateTime::where('uid',auth('web-member')->id())->orderBy('year', 'DESC')->select('id','year','price')->get();
        if ($request->ajax()) {
            if ($res->count() == 0) {
                return response()->json(['status' => 0]);
            }
            return response()->json([
                'status' => 1,
                'data'   => view('mobile.app.person.ajax_tpl.ajax_recuperate', ['order' => $res['order']])->render(),
            ]);
        }

        $return_data = [
            'back_url'=>route('mobile.person.index'),
            'list'   => $res,
            'params' => $request->all(),
        ];
        return view('mobile.app.person.recuperate', $return_data);
    }

    public function audit_qx(Request $request)
    {
        $id     = $request->id;
        if (empty($id)) {
            return response()->json(['status'=>0,'msg'=>'数据异常']);
        }
        $uid = auth('web-member')->id();
        $result = RecuperateApply::where('id', '=', $id)->update(['status' => 3]);
        $auditData = array(
            'type' => 1,
            'admin_id' => $uid,
            'sid' => $uid,
            'content' => "取消活动"
        );
        RecuperateLog::create($auditData);
        if ($result) {
            return response()->json(['status'=>1,'msg'=>'活动已取消']);
        } else {
            return response()->json(['status'=>0,'msg'=>'该信息不存在或已审核']);

        }
    }

    /**
     * 中奖列表
     */
    public function lottery(Request $request)
    {
        $size = 8;
        $user_id = auth('web-member')->user()->id;
        $rst  = LotteryWin::where('member_id',$user_id)->orderBy('status','asc')->orderBy('created_at','desc')->paginate($size);

        if ($request->ajax()) {
            if ($rst->lastPage() < $rst->currentPage()) {
                return response()->json(['status' => 0]);
            }
            return response()->json(['status' => 1, 'data' => view('mobile.app.person.ajax_tpl.ajax_lottery', ['list' => $rst])->render()]);
        }
        $mobile_dropload = false;
        if ($rst->total() > $size) {
            $mobile_dropload = true;
        }
        $return_data = [
            'list'            => $rst,
            'current_url'     => \Illuminate\Support\Facades\Request::getRequestUri(),
            'wap_title'       => '中奖列表',
            'mobile_dropload' => $mobile_dropload,
        ];

        return view('mobile.app.person.lottery', $return_data);
    }
}