<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/7/31
 * Time: 14:58
 */

namespace App\Http\Controllers\Web\Hardware\Pad;

use App\Http\Controllers\Web\WebBaseController;
use App\Repositories\MemberPointRepository;
use App\Repositories\MemberSetmealRepository;
use App\Repositories\RefreshLogRepository;
use App\Repositories\SetmealRepository;
use App\Repositories\CompanyContactsRepository;
use App\Services\Common\CategoryService;
use App\Services\Jobfair\JobfairPutJobService;
use App\Services\Common\SetmealIncrementsService;
use App\Services\Company\CompanyService;
use App\Services\Company\ServiceService;
use App\Services\Company\JobsService;
use App\Services\Jobfair\JobfairCompanyService;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Services\Jobfair\JobfairJobsService;
use App\Services\Jobfair\JobfairPersonalJopApplyService;
use App\Validators\JobsSaveValidatorRequest;
use App\Repositories\Jobfair\JobfairPutJobRepository;
use App\Repositories\Jobfair\JobfairRepository;
use App\Repositories\Jobfair\JobfairPersonalJobsApplyRepository;
use App\Repositories\JobsRepository;
use Illuminate\Support\Facades\Cache;
class RecruitmentController extends WebBaseController
{
    protected $jobsfairPutJobService;
    protected $categoryService;
    protected $companyService;
    protected $memberSetmealRepository;
    protected $setmealIncrementsService;
    protected $refreshLogRepository;
    protected $memberPointRepository;
    protected $setmealRepository;
    protected $companyContactsRepository;
    protected $serviceService;
    protected $subsiteService;
    protected $jobfairJobsService;
    protected $jobfairRepository;
    protected $jobfairPutJobRepository;
    protected $jobfairPersonalJobsApplyRepository;
    protected $jobsRepository;
    protected $jobsService;
    protected $jobfairCompanyService;
    protected $jobfairPersonalJopApplyService;

    /**
     * JobsController constructor.
     * @param JobfairPutJobService $jobsfairPutJob
     * @param CategoryService $categoryService
     * @param CompanyService $companyService
     * @param $memberSetmealRepository
     * @param $setmealIncrementsService
     * @param $refreshLogRepository
     * @param $memberPointRepository
     * @param $setmealRepository
     * @param $companyContactsRepository
     * @param $queueAutoRefreshRepository
     * @param $serviceService
     * @param $jobfairRepository
     * @param $jobfairPutJobRepository
     * @param $jobfairPersonalJobsApplyRepository
     * @param $jobsRepository
     * @param $jobsService
     * @param $jobfairPersonalJopApplyService
     */
    public function __construct(JobfairPutJobService $jobsfairPutJobService, ServiceService $serviceService, SetmealRepository $setmealRepository,CompanyContactsRepository $companyContactsRepository, MemberPointRepository $memberPointRepository, RefreshLogRepository $refreshLogRepository, CategoryService $categoryService, CompanyService $companyService, MemberSetmealRepository $memberSetmealRepository, SetmealIncrementsService $setmealIncrementsService,JobfairJobsService $jobfairJobsService,JobfairRepository $jobfairRepository,JobfairPutJobRepository $jobfairPutJobRepository,JobfairPersonalJobsApplyRepository $jobfairPersonalJobsApplyRepository,JobsRepository $jobsRepository,JobsService $jobsService,JobfairCompanyService $jobfairCompanyService,JobfairPersonalJopApplyService $jobfairPersonalJopApplyService)
    {
        $this->jobsfairPutJobService = $jobsfairPutJobService;
        $this->categoryService = $categoryService;
        $this->companyService = $companyService;
        $this->memberSetmealRepository = $memberSetmealRepository;
        $this->setmealIncrementsService = $setmealIncrementsService;
        $this->refreshLogRepository = $refreshLogRepository;
        $this->memberPointRepository = $memberPointRepository;
        $this->setmealRepository = $setmealRepository;
        $this->setmealRepository = $setmealRepository;
        $this->companyContactsRepository = $companyContactsRepository;
        $this->serviceService = $serviceService;
        $this->jobfairJobsService = $jobfairJobsService;
        $this->jobfairRepository = $jobfairRepository;
        $this->jobfairPutJobRepository = $jobfairPutJobRepository;
        $this->jobfairPersonalJobsApplyRepository = $jobfairPersonalJobsApplyRepository;
        $this->jobsRepository = $jobsRepository;
        $this->jobsService = $jobsService;
        $this->jobfairCompanyService = $jobfairCompanyService;
        $this->jobfairPersonalJopApplyService = $jobfairPersonalJopApplyService;
    }

    public function index()
    {
        return view('app.hardware.pad.recruitment.index',['title'=>'现场招聘']);
    }

    public function jobs()
    {
        return view('app.hardware.pad.recruitment.jobs.index',['title'=>'招聘会职位管理']);
    }

    public function jobsAdd()
    {
        $district = config('aix.system.site_other.site_other.district');
        if($district && substr_count($district,'.') == 1){
            $district .= '.0';
        }elseif ($district && substr_count($district,'.') == 0){
            $district .= '.0.0';
        }
        $user = auth('web-company')->user();
        $contacts = $this->companyContactsRepository->getContacts(['company_id'=>$user->id]);
        return view('app.hardware.pad.recruitment.jobs.add',['title'=>'新增职位','contacts'=>$contacts,'district'=>$district]);
    }

    public function jobsSave(JobsSaveValidatorRequest $request)
    {
        $user = auth('web-company')->user()->toArray();
        return $this->jobsfairPutJobService->jobfairJobsSave($request->all(),$user);
    }

    public function jobsList()
    {
        $jobfair_id = session('floorplan_stands.jobfair_id');
        //在招职位
        $where['jobfair_id'] = [$jobfair_id];
        $user = auth('web-company')->user();
        $where1 = ['position_id'=>session('floorplan_stands.id')];
        $jobs = $this->jobsfairPutJobService->jobfairCompany($where,$user,$where1,10);
        if(request()->ajax())
        {
            if ($jobs->isNotEmpty()) {
                return response()->json(['status'=>1,'data'=>view('app.hardware.pad.recruitment.jobs.ajax_list', ['jobs'=>$jobs])->render()]);
            }
            return response()->json(['status'=>0]);
        }
        return view('app.hardware.pad.recruitment.jobs.list', ['title'=>'已发布职位','jobs' => $jobs]);
    }

    public function jobsEdit(Request $request)
    {
        $job_info = $this->jobsfairPutJobService->jobfairJobsEdit($request->id);
        $page = $request->page ?? 1;
        if(!$job_info){
            return $this->notFount('参数错误');
        }
        $user = auth('web-company')->user();
        $contacts = $this->companyContactsRepository->getContacts(['company_id'=>$user->id]);
        return view('app.hardware.pad.recruitment.jobs.edit', ['title'=>'编辑职位','job_info' => $job_info,'page'=>$page,'contacts'=>$contacts]);
    }

    public function jobsUpdate(JobsSaveValidatorRequest $request)
    {
        $user = auth('web-company')->user();
        $id = $request->id;
        $this->jobfairJobsService->isOwn($id,$user);
        return  $this->jobsfairPutJobService->jobfairPutJobsEdit($request,$user->toArray());
    }

    public function jobsDelete(Request $request)
    {
        $ids = $request->ids;
        if(!$ids) {
            return response()->json(['status' => 0, 'msg' => '请选择职位']);
        }
        $ids = explode(',',$ids);
        $user = $this->getLoginUser();
        $this->jobsfairPutJobService->isOwn($ids,$user->id);
        if($this->jobfairPutJobRepository->delJobs($ids))
        {
            return response()->json(['status' => 1, 'msg' => '删除成功']);
        }
        return response()->json(['status' => 0, 'msg' => '删除失败']);
    }

    public function jobsDisplay(Request $request)
    {
        $user = $this->getLoginUser();
        $this->jobsfairPutJobService->isOwn($request->id,$user->id);
        return $this->jobsfairPutJobService->displayswitch($request->id,$request->display);
    }

    public function jobsDisplayAll(Request $request)
    {
        $ids = $request->ids;
        if(!$ids) {
            return response()->json(['status' => 0, 'msg' => '请选择职位']);
        }
        $ids = explode(',',$ids);
        $user = $this->getLoginUser();
        $this->jobsfairPutJobService->isOwn($ids,$user->id);
        return $this->jobsfairPutJobService->displayAllSwitch($ids,$request->display);
    }

    //sync 是网络职位
    public function jobsSyncList()
    {
        $job_where = [
            ['company_id', '=', auth('web-company')->user()->id],
            ['valid', '=', 1]
        ];
        if (config('aix.companyset.comset.show_set.jobs_display') == 1) {
            $job_where[] = array('audit', '=', 1);
        } else {
            $job_where[] = array('audit', '<>', 3);
        }
        $list = $this->jobsRepository->getJobsList($job_where);
        $exid = session('floorplan_stands.exid');
        foreach ($list as &$val) {
            $val->education_cn = get_category($val->education) ? get_category($val->education) : '不限';
            $val->experience_cn = get_category($val->experience) ? get_category($val->experience) : '不限';
            if($val->wage == -1)
            {
                $val->wage_cn = '面议';
            }else{
                if($val->wage_max) {
                    $val->wage_cn = $val->wage_min .'-'.$val->wage_max.'/月';
                }else{
                    $val->wage_cn = $val->wage_min . '/月以上';
                }
            }
            if($val->ygxs == 363) {
                $val->wage_cn = $val->wage_min .'/小时';
            }
            $val->nature_cn = get_category($val->nature);
            $val['is_sync'] = false;
            if($this->jobfairPutJobRepository->isSync(['jobs_name'=>$val['jobs_name']],['exid'=>$exid])) {
                $val['is_sync'] = true;
            }
        }
        if(request()->ajax())
        {
            if ($list->isNotEmpty()) {
                return response()->json(['status'=>1,'data'=>view('app.hardware.pad.recruitment.jobs.ajax_sync_list',['list'=>$list])->render()]);
            }
            return response()->json(['status'=>0]);
        }
        $res['title']= '网络职位';
        $res['list']= $list;
        return view('app.hardware.pad.recruitment.jobs.sync',$res);
    }

    public function jobsSync(Request $request)
    {
        if(!is_array($request->jobs_id)) {
            $request->jobs_id = explode(',',$request->jobs_id);
        }
        $user = auth('web-company')->user();
        $this->jobsService->isOwn( $request->jobs_id,$user);
        $this->jobfairCompanyService->isOwn($request->exid, $user);
        return $this->jobfairJobsService->jobsToJobfairPad($request,$user->toArray());
    }

//    public function jobsSyncEdit(Request $request)
//    {
//        $user = auth('web-company')->user();
//        $job_info = $this->jobfairJobsService->jobfairJobsEdit($request->id,$user);
//        if(!$job_info){
//            return $this->notFount('参数错误');
//        }
//        $job_info['page'] = $request->page ?? 1;
//        $job_info['title'] = '编辑职位库职位';
//        return view('app.hardware.pad.recruitment.jobs.sync_edit',$job_info);
//    }
//
//
//
//    public function jobsSyncDelete(Request $request)
//    {
//        return $this->jobfairJobsService->jobfairJobsDel($request);
//    }

    public function appointment(Request $request)
    {
        $user = auth('web-company')->user();
        $status = $request->input('status','');
        $where = [
            'company_id'=>$user->id,
            'jobfair_id'=>session('floorplan_stands.jobfair_id'),
            'type'=>1,
            'is_apply'=>1,
        ];
        $jobfair = $this->jobfairRepository->find(session('floorplan_stands.jobfair_id'));
        $holddate_start = date('Y-m-d H:i:s',$jobfair->holddate_start);
        if($status == 1){
            $where[] = ['created_at','<',$holddate_start];
        }elseif($status == 2){
            $where[] = ['created_at','>=',$holddate_start];
        }
        $result = $this->jobfairPersonalJobsApplyRepository->padApplyJobs($where,10);
        foreach($result as &$value)
        {
            //1.照片为空
            //2.照片主动不显示
            //3.照片审核不通过
            //4.先审核后显示:照片不是审核通过的(不等于1)
            $avatar_default = public_data_path('/data/upload/resource/no_photo_female.png');
            if ($value->resumes->memberInfos->sex == 1) {
                $avatar_default = public_data_path('/data/upload/resource/no_photo_male.png');
            }
            if ($value->resumes->memberInfos->images == '' || $value->resumes->memberInfos->display_images == 2 || $value->resumes->memberInfos->photo_audit == 0 || (config('aix.personal_set.per_set.show_set.resume_img_display') == 1 && $value->resumes->memberInfos->photo_audit != 2)) {
                $value->resumes->photosrc = $avatar_default;    //不显示
                $value->resumes->photosrc_show = false;
            } else {
                $value->resumes->photosrc = upload_asset($value->resumes->memberInfos->images);  //显示
                $value->resumes->photosrc_show = true;
            }
            if($value->created_at < $holddate_start)
            {
                $value->is_network =true;
            }else {
                $value->is_network =false;
            }
        }
        $params = array('status'=>$status);
        if($request->ajax())
        {
            if ($result->isNotEmpty()) {
                return response()->json(['status'=>1,'data'=>view('app.hardware.pad.recruitment.ajax_appointment_list', ['result'=>$result])->render()]);
            }
            return response()->json(['status'=>0]);
        }
        return view('app.hardware.pad.recruitment.appointment',['title'=>'预约管理','result' => $result,'params'=>$params]);
    }

    public function appointmentDelete(Request $request)
    {
        if(!$request->id)
        {
            return response()->json(['status' => 0, 'msg' => '请选择预约']);
        }
        $user = $this->getLoginUser();
        $this->jobfairPersonalJopApplyService->isComOwn($request->id,$user);
        if($this->jobfairPersonalJobsApplyRepository->delete(['id'=>$request->id]))
        {
            return response()->json(['status' => 1, 'msg' => '删除成功']);
        }
        return response()->json(['status' => 0, 'msg' => '删除失败']);
    }

    public function manage()
    {
        $user = auth('web-company')->user();
        $view = Cache::get('jobfair-'.$user->id);
        return view('app.hardware.pad.recruitment.manage',['title'=>'展示模板','view'=>$view]);
    }

    public function manageSetCache(Request $request)
    {
        $id = $request->input('id','');
        if(!$id)
        {
            return response()->json(['status' => 0, 'msg' => '请选择模板']);
        }
        $user = auth('web-company')->user();
        $jobfair = $this->jobfairRepository->find(session('floorplan_stands.jobfair_id'));
        $holddate_end = date('Y-m-d H:i:s',$jobfair->holddate_end);
        $time = Carbon::parse($holddate_end);
        Cache::put('jobfair-'.$user['id'], $id,$time);
        if(Cache::get('jobfair-'.$user['id'])){
            Cache::put(session('floorplan_stands.jobfair_id').'-'.$user['id'], time(),120);
            return response()->json(['status' => 1, 'msg' => '设置成功,请刷新']);
        }
        return response()->json(['status' => 0, 'msg' => '设置失败,请重新设置']);
    }

    public function refresh()
    {
        $user = auth('web-company')->user();
        Cache::put(session('floorplan_stands.jobfair_id').'-'.$user['id'], time(),120);
        if(Cache::get(session('floorplan_stands.jobfair_id').'-'.$user['id'])){
            return response()->json(['status' => 1, 'msg' => '刷新成功']);
        }
        return response()->json(['status' => 0, 'msg' => '刷新失败']);
    }
}