<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/8/14
 * Time: 10:43
 */

namespace App\Http\Controllers\Web\Train;


use App\Exceptions\ResponseException;
use App\Models\Article;
use App\Models\Category;
use App\Models\Train\TrainCourseUser;
use App\Repositories\AdRepository;
use App\Repositories\ArticleRepository;
use App\Repositories\Train\TrainCourseRepository;
use App\Repositories\Train\TrainCourseUserRepository;
use App\Repositories\Train\TrainTeacherRepository;
use App\Services\Train\CourseService;
use App\Validators\Rules\MobileRule;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Laravel\Horizon\LuaScripts;

class TrainController
{
    private $courseRepository;
    private $trainCourseUserRepository;
    private $courseService;
    private $teacherRepository;
    private $adRepository;
    private $articleRepository;
    public function __construct(ArticleRepository $articleRepository,AdRepository $adRepository,TrainTeacherRepository $teacherRepository,CourseService $courseService,TrainCourseUserRepository $trainCourseUserRepository,TrainCourseRepository $courseRepository)
    {
        $this->courseRepository=$courseRepository;
        $this->trainCourseUserRepository=$trainCourseUserRepository;
        $this->courseService=$courseService;
        $this->teacherRepository=$teacherRepository;
        $this->adRepository=$adRepository;
        $this->articleRepository=$articleRepository;
    }
    //个人会员中心所有培训
    public function list(){
        $courses=$this->courseRepository->courses();
        $user=auth('web-member')->user();

        return view('app.train.person.course',['courses'=>$courses,"user"=>$user]);
    }
    //我的报名
    public function joined(){
        $user=auth('web-member')->user();

        $courses=$this->trainCourseUserRepository->JoinedCourses($user->id);

        return view('app.train.person.course_joined',['courses'=>$courses]);
    }

    public function joinedEdit($id,$action){
        $user=auth('web-member')->user();
        $res = TrainCourseUser::where(['member_id'=>$user->id])->get()->toArray();
        $array_id = array_column($res,'course_id');
        if(!in_array($id,$array_id)){
            throw new ResponseException('报名信息不存在');
        }
        $join_info=$this->trainCourseUserRepository->findJoin($id,$user->id);

        if ($join_info->audit==1 && $action=="edit"){
            return back()->with(['msg'=>"不可以修改审核通过的报名信息!"]);
        }

        return view('app.train.person.course_joined_edit',['join_info'=>$join_info->join_info,'result'=>$join_info]);

    }
    public function joinedEditAction($id,Request $request){
        $user=auth('web-member')->user();
        $request_data=$request->input();

        $rule = [
            'realname'            => 'required',
            'phone'=>['required',new MobileRule()],
            'id_card'=>['required',"regex:/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/"],
            'education_cn' => 'required',
            'residence_cn' => 'required',
        ];
        $msg = [
            'realname.required'=>'姓名不能为空',
            'education_cn.required'=>'学历不能为空',
            'residence_cn.required'=>'现居住地址不能为空',
            'id_card.required'=>'证件号不能为空',
            'id_card.regex'=>'证件号格式错误',
            'phone.required'=>'手机号不能为空',
            'phone.unique'=>'手机号已经存在',
        ];

        $validator = Validator::make($request_data, $rule, $msg);

        if ($validator->fails()) {
            $error = $validator->errors()->first();
             return back()->withErrors($error);

        }
        $en_data=serialize($request_data);

        $data["join_realname"]=$request_data['realname'];
        $data["join_phone"]=$request_data['phone'];
        $data["join_id_card"]=$request_data['id_card'];
        $data["join_residence_cn"]=$request_data['residence_cn'];
        $data["join_education_cn"]=$request_data['education_cn'];

        $data["join_info"]=$en_data;

        $isOk=$this->trainCourseUserRepository->updateJoinInfo($id,$user->id,$data);
        if (!empty($isOk)){
            return redirect(route("person.train.joined"))->with(['msg'=>"修改成功"]);
        }else{
            return back()->with(['msg'=>"修改失败"]);
        }
    }

    public function index()
    {
        $fengCaiAb=$this->adRepository->getAb("train_fengcai");
        $artisans=$this->articleRepository->getArticle(['type_id'=>Article::PeiXunZC],request('limit',4));

        $data=$this->courseService->courseIndex();
        $data['ab']=$fengCaiAb;
        $data['artisans']=$artisans;
        return view('app.train.index',$data);
    }
    public function about()
    {
        $courses=$this->courseRepository->Recommend(6);

        return view('app.train.about',['courses'=>$courses]);
    }
    public function policy()
    {
        $artisans=$this->articleRepository->getArticle(['type_id'=>Article::PeiXunZC],request('limit',4));

        return view('app.train.policy',['artisans'=>$artisans]);
    }
    public function policyShow($id)
    {
        $this->articleRepository->Click($id);
        $artisan=$this->articleRepository->firstWhere(['id'=>$id]);
        $beforeAndNext=$this->articleRepository->beforeAndNext($id,$artisan->type_id);

        return view('app.train.policy_show',["artisan"=>$artisan,'bf'=>$beforeAndNext]);
    }
    public function course()
    {
        return view('app.train.course');
    }

    public function courseAction(){
        //审核通过,课程没结束的
        $key=['audit'=>1,["open_end_time",'>',date("Y-m-d h:i:s")]];
        empty(request('key')) ?   : $key[]=['name', 'like', '%'.request('key').'%'];
        empty(request('time')) ?  : $key[]=['open_time', '<', request('time')." 23:59:59"];

        !empty(\request('is_expenses')) ? : $key[]=['is_expenses',0];

        $order_key="created_at";
        if (\request('type')=="hot"){
            $order_key="apply_members_count";
        }
        $courses=$this->courseRepository->coursesSearch($order_key,$key);
        return AjaxSuccess($courses);
    }
    //课程详情
    public function courseShow()
    {
        $id=request('id');

        $courseInfo=$this->courseRepository->CourseInfo($id);
        //推荐课程
        $Recommend=$this->courseRepository->Recommend(4);
        //其他课程
        $Others=$this->courseRepository->OtherCourses(6);


        $this->courseService->courseShowClick($id);

        return view('app.train.course_show',['courseInfo'=>$courseInfo,"Recommend"=>$Recommend,"others"=>$Others]);
    }
    //报名
    public function courseJoin($id){
        $user=auth('web-member')->user();

        $this->courseService->Join($user,$id);

    }
    public function teacher()
    {
        return view('app.train.teacher');
    }
}