<?php
/**
 * Created by PhpStorm.
 * User: wuzhenke
 * Date: 2018/11/20
 * Time: 9:53
 */

namespace App\Http\Controllers\Web\Company;

use App\Exceptions\ResponseException;
use App\Http\Controllers\Web\WebBaseController;
use App\Services\Common\EmailService;
use App\Services\Company\CompanyDownResumeService;
use App\Services\Company\PersonalJobsApplyService;
use App\Services\Person\ResumeService;
use Illuminate\Http\Request;

class ResumeController extends WebBaseController
{
    protected $personalJobsApplyService;
    protected $resumeService;
    protected $companyDownResumeService;
    protected $emailService;

    /**
     * ResumeController constructor.
     * @param $personalJobsApplyService
     * @param $resumeService
     * @param $companyDownResumeService
     * @param $emailService
     */
    public function __construct(PersonalJobsApplyService $personalJobsApplyService, EmailService $emailService, ResumeService $resumeService, CompanyDownResumeService $companyDownResumeService)
    {
        $this->personalJobsApplyService = $personalJobsApplyService;
        $this->resumeService = $resumeService;
        $this->companyDownResumeService = $companyDownResumeService;
        $this->emailService = $emailService;
    }

    /**
     * 收到的简历
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function resumeApply(Request $request)
    {
        $user = auth('web-company')->user();
        $result = $this->personalJobsApplyService->resumeApply($request->all(), $user);
        return view('app.company.resume.resume_apply', $result);
    }

    /**
     * 标记简历
     * @param $id
     * @param $state
     * @return \Illuminate\Http\JsonResponse
     */
    public function resumeLabelApply($id, $state)
    {
        $user = auth('web-company')->user();
        return $this->personalJobsApplyService->labelApply($id, $state, $user);
    }

    /**
     * 删除申请的简历(单个和批量)
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function delJobsApply(Request $request)
    {
        if ($request->method()=='GET') {
            $tip='被删除后将无法恢复,您确定要删除选中的简历吗?';
            return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
        } else {
            $user = auth('web-company')->user();

            return $this->personalJobsApplyService->delJobsApply($request,$user);
        }
    }

    /**
     * 邀请面试
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function jobsInterview(Request $request)
    {
        $user = auth('web-company')->user();
        if ($request->method() == 'GET') {
            if (!$request->resume_id) {
                return response()->json(['status'=>0, 'msg'=>'请选择简历!']);
            }
            return $this->personalJobsApplyService->getApply($request->all(), $user);
        } else {
            return $this->personalJobsApplyService->saveApply($request,$user);
        }
    }

    /**
     * 保存到电脑  ====收到简历
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse
     * @throws ResponseException
     */
    public function resumeSaveToComputer(Request $request)
    {
        $yid = $request->y_id;
        $model = $request->model;
        if (!$yid) {
            throw new ResponseException('请选择简历');
        }
        $user = auth('web-company')->user();
        if($model == 'personaljobsapply') {
            $this->personalJobsApplyService->isOwn($yid, $user,'id');
        }
        if($model == 'downresume') {
            $this->companyDownResumeService->isOwn($yid, $user,'id');
        }
        $model_arr = ['personaljobsapply','downresume'];
        if (!in_array($model, $model_arr)) {
            throw new ResponseException('参数错误');
        }

        if (false === $res = $this->personalJobsApplyService->saveAsDoc($yid, $model)) {
            throw new ResponseException('查找不到相关简历!');
        } else {
            return response()->download($res['path'], "简历压缩包".date("Ymd").".zip");
        }
        return response()->json(['status'=>0, 'msg'=>"保存失败"]);
    }

    /**发送到Email
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function sendToEmail(Request $request)
    {
        $resume_id = $request->resume_id;
        if (!$resume_id) {
            return response()->json(['status'=>0,'msg'=>'请选择简历!']);
        }
        if ($request->method()=='POST') {
            $user = auth('web-company')->user();
            $model = $request->model;
            if($model == 'personaljobsapply') {
                $this->personalJobsApplyService->isOwn($resume_id, $user,'resume_id');
            }
            if($model == 'downresume') {
                $this->companyDownResumeService->isOwn($resume_id, $user,'resume_id');
            }
            $email = $request->email;
            $pattern = "/^[_\.0-9a-zA-Z-]+[_0-9a-zA-Z-]@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,3}$/";
            if (!$email || !preg_match($pattern, $email)) {
                return response()->json(['status'=>0,'msg'=>'email不正确']);
            }
            return $this->sendEmail($email, $resume_id);
        }
        return response()->json(['status'=>1,'msg'=>'返回成功','html'=>view('app.company.ajax.ajax_send_to_email')->render()]);
    }

    /**发送到Email
     * @param $email
     * @param $resume_id
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function sendEmail($email, $resume_id)
    {
        if (!is_array($resume_id)) {
            $resume_id = explode(',', $resume_id);
        }
        foreach ($resume_id as $key => $val) {
             $this->sendEmailDone($email, $val);
        }
        return response()->json(['status'=>1,'msg'=>"发送成功!" ]);
    }

    /**发送到Email
     * @param $email
     * @param $resume_id
     * @return ResumeController
     * @throws \Throwable
     */
    public function sendEmailDone($email, $resume_id)
    {
        $res = $this->resumeService->resumeDoc($resume_id);
        if (!$res) {
            return $this->sendErrorResponse('参数错误!', 404);
        }
        $resume = view('app.tpl.word_resume', ['content'=>$res])->render();
        $this->emailService->sendMail($email, EmailService::TEMPLATE_SEND_RESUME, ['personalfullname'=>$res['resume']['fullname']], ['resume'=>$resume]);
    }

    /**
     * @param Request $request
     * @param 企业的邀请面试记录
     * @return 集合
     */
    public function interviewJobs(Request $request)
    {
        $user = auth('web-company')->user();
        $res = $this->resumeService->interviewJobs($request->all(), $user);
        return view('app.company.resume.jobs_interview', $res);
    }

    /**
     * 面试邀请详情
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function interviewDetail(Request $request)
    {
        return $this->resumeService->interviewDetail($request);
    }

    /**
     * 删除下载面试邀请
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function interviewDel(Request $request)
    {
        if ($request->method()=='GET') {
            $tip='被删除后将无法恢复,您确定要删除选中的面试邀请记录吗?';
            return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>['html'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]]);
        } else {
            $user = auth('web-company')->user();
            $res =  $this->resumeService->interviewDel($request->all(),$user);
            return response()->json(['status'=>$res['status'], 'msg'=>$res['msg']]);
        }
    }

    /**
     * 已下载简历
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function resumeDown(Request $request)
    {
        $user = auth('web-company')->user();
        $result = $this->resumeService->resumeDown($request->all(), $user);
        return view('app.company.resume.resume_down', $result);
    }

    public function resumeDownDel(Request $request)
    {
        if ($request->method() =='POST') {
            return $this->resumeService->resumeDownDel($request);
        }
        $tip='被删除后将无法恢复,您确定要删除选中的下载的简历吗?';
        return response()->json(['status'=>1,'msg'=>'获取数据成功', 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
    }

    /**
     * 标注下载简历
     * @param $id
     * @param $state
     * @return \Illuminate\Http\JsonResponse
     */
    public function labelResume($id, $state)
    {
        return $this->companyDownResumeService->labelApply($id, $state);
    }

    /**企业收藏的简历
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function favoritesResume(Request $request)
    {
        $user = auth('web-company')->user();
        $res = $this->resumeService->favoritesResume($request, $user, 0);

        return view('app.company.resume.favorites_resume', $res);
    }

    /**收藏简历
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Prettus\Validator\Exceptions\ValidatorException
     * @throws \Throwable
     */
    public function favoritesResumeSave(Request $request)
    {
        if ($request->method() == 'GET') {
            $tip = "您确定要收藏选中的简历吗?";
            return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
        }
        return $this->resumeService->favoritesResumeSave($request);
    }

    /**删除收藏的简历
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function favoritesResumeDel(Request $request)
    {
        if ($request->method() == 'GET') {
            $tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
            return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
        }
        $user = auth('web-company')->user();
        return $this->resumeService->favoritesResumeDel($request->y_id,$user);
    }

    /**
     * 浏览过的简历
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function browseResume(Request $request)
    {
        $res = $this->resumeService->browseResume($request);
        return view('app.company.resume.browse_resume', $res);
    }

    /**删除浏览过的简历
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function browseResumeDel(Request $request)
    {
        if ($request->method() == 'GET') {
            $tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
            return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
        }
        $user = auth('web-company')->user();
        return $this->resumeService->browseResumeDel($request,$user);
    }

    /**谁看过我
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function browseJobs(Request $request)
    {
        $res = $this->resumeService->browseJobs($request);
        return view('app.company.resume.browse_jobs', $res);
    }

    /**删除谁看过我
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function browseJobsDel(Request $request)
    {
        if ($request->method() == 'GET') {
            $tip = "被删除后将无法恢复,您确定要删除选中的简历吗?";
            return response()->json(['status'=>1, 'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
        }
        $user = auth('web-company')->user();
        return $this->resumeService->browseJobsDel($request,$user);
    }

    /**面试邀请
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function feedback(Request $request)
    {

        $res = $this->resumeService->feedback($request);
        return view('app.company.resume.feedback', $res);
    }

    /**面试邀请反馈操作
     * @param Request $request
     * @return ResumeController|\Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function feedbackModify(Request $request)
    {
        $id = $request->id?$request->id:0;
        if (!$id) {
            return response()->json(['status'=>0,'msg'=>'参数错误!']);
        }
        if ($request->method() == "POST") {
            $explan = $request->notes?$request->notes:'';
            $status = $request->status?$request->status:0;
            if (!$status) {
                return $this->sendErrorResponse('请选择反馈结果!');
            }
            $user = auth('web-company')->user();
            return $this->resumeService->feedbackModify($id, $explan, $status,$user->id);
        }
        return response()->json(['status'=>1,'html'=>view('app.company.ajax.ajax_feedback', ['id'=>$id])->render()]);
    }

    /**回收站
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function recycle()
    {
        $res = $this->resumeService->recycle();
        return view('app.company.resume.resume_recycle', $res);
    }

    /**回收站删除
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function destroyJobsApply(Request $request)
    {
        $ids = $request->id;
        if ($request->method()=='POST') {
            return $this->resumeService->destroyJobsApply($ids);
        }
        $tip = "此处删除为物理删除,您确定要删除选中的简历吗?";
        return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
    }

    /**清空回收站
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @throws \Throwable
     */
    public function clearRecycle(Request $request)
    {
        if ($request->method()=='POST') {
            return $this->resumeService->clearRecycle();
        }
        $tip = "清空回收站将物理删除所有简历,您确定要清空回收站吗?";
        return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
    }

    public function concern(Request $request)
    {
        $res = $this->resumeService->concern($request);
        return view('app.company.resume.concern', $res);
    }

    public function concernDel(Request $request)
    {
        if ($request->method()=='POST') {
            $user = auth('web-company')->user();
            return $this->resumeService->concernDel($request,$user);
        }

        $tip = "被删除后将无法恢复,您确定要删除选中的记录吗?";
        return response()->json(['status'=>1,'data'=>view('app.company.ajax.ajax_warning', ['tip'=>$tip])->render()]);
    }

}