<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use App\Models\ExamPage;
use App\Models\ExamType;
use App\Models\ExamPageFaq;
use App\Models\State;
use App\Models\City;
use App\Models\ExamName;
use App\Models\CoachingMaster;
use App\Models\ManageFaq;
use App\Models\CoachingTag;
use App\Models\Test;
use App\Models\ExamPageInfoCategory;
use App\Models\ExamPageInfoInformation;
use App\Models\ExamCategory;
use App\Models\ExamDetails;
use App\Models\ExamPagePass;
use App\Models\ExamPageSection;
use App\Models\ExamPageSectionProduct;
use App\Models\Pass;
use App\Models\PackageManageListing;
use App\Models\ExamPageBlog;
use App\Models\ExamPagePopularCoachingCategory;
use App\Models\ExamPagePopularCoachingSubcategory;
use DB;
use Image;

/**
 * Class ExamPageController.
 */

class ExamPageController extends Controller
{
	/**
     * @var model
     * @var examTypeModel
     * @var examPageFaqModel
     * @var stateModel
     * @var cityModel
     * @var examNameModel
     * @var coachingMasterModel
     * @var manageFaqModel
     * @var coachingTagModel
     * @var testModel
     * @var examPageInfoCategoryModel
     * @var examPageInfoInformationModel
     * @var examCategoryModel
     * @var examDetailsModel
     * @var examPagePassModel
     * @var passModel
     * @var examPageSectionModel
     * @var examPageSectionProductModel
     * @var packageManageListingModel
     * @var examPageBlogModel
     * @var examPagePopularCoachingCategoryModel
     * @var examPagePopularCoachingSubcategoryModel
     */
    protected $model;
    protected $examTypeModel;
    protected $examPageFaqModel;
    protected $stateModel;
    protected $cityModel;
    protected $examNameModel;
    protected $coachingMasterModel;
    protected $manageFaqModel;
    protected $coachingTagModel;
    protected $testModel;
    protected $examPageInfoCategoryModel;
    protected $examPageInfoInformationModel;
    protected $examCategoryModel;
    protected $examDetailsModel;
    protected $examPagePassModel;
    protected $passModel;
    protected $examPageSectionModel;
    protected $examPageSectionProductModel;
    protected $packageManageListingModel;
    protected $examPageBlogModel;
    protected $examPagePopularCoachingCategoryModel;
    protected $examPagePopularCoachingSubcategoryModel;
    
    /**
     * ExamPageController constructor.
     *
     */
    public function __construct()
    {
        $this->model = new ExamPage;
        $this->examTypeModel = new ExamType;
        $this->examPageFaqModel = new ExamPageFaq;
        $this->stateModel = new State;
        $this->cityModel = new City;
        $this->examNameModel = new ExamName;
        $this->coachingMasterModel = new CoachingMaster;
        $this->manageFaqModel = new ManageFaq;
        $this->coachingTagModel = new CoachingTag;
        $this->testModel = new Test;
        $this->examPageInfoCategoryModel = new ExamPageInfoCategory;
        $this->examPageInfoInformationModel = new ExamPageInfoInformation;
        $this->examCategoryModel = new ExamCategory;
        $this->examDetailsModel = new ExamDetails;
        $this->examPagePassModel = new ExamPagePass;
        $this->passModel = new Pass;
        $this->examPageSectionModel = new ExamPageSection;
        $this->examPageSectionProductModel = new ExamPageSectionProduct;
        $this->packageManageListingModel = new PackageManageListing;
        $this->examPageBlogModel = new ExamPageBlog;
        $this->examPagePopularCoachingCategoryModel = new ExamPagePopularCoachingCategory;
        $this->examPagePopularCoachingSubcategoryModel = new ExamPagePopularCoachingSubcategory;
    }

    /**
     * Exam Page Controller index.
     *
     */
    public function index(Request $req) 
    {
        $exam_types = $this->examTypeModel->select('id','exam_type')->where('status',1)->orderBy('id')->get();
        $pages = $this->model
                          ->join('exam_types','exam_pages.exam_type_id','=','exam_types.id')
                          ->join('exam_names','exam_pages.exam_name_id','=','exam_names.id')
                          ->orderBy('exam_pages.id')
                          ->select('*','exam_pages.id','exam_pages.status')->limit(20)->get();
        //echo '<pre>';print_r($coach_sub_cat_list);die;   
        return view('admin.pages.website_management.exam_page.list')
                    ->withExamTypes($exam_types)
                    ->withPages($pages);
    }

    /**
     * Exam Page Controller add.
     *
     */
    public function add(Request $req) 
    {
        $exam_types = $this->examTypeModel->select('id','exam_type')->where('status',1)->orderBy('id')->get();
        $states = $this->stateModel->orderBy('name','ASC')->get();
        //echo '<pre>';print_r($coach_sub_cat_list);die;   
        return view('admin.pages.website_management.exam_page.add')
                ->withExamTypes($exam_types)
                ->withStates($states);
    }

    /**
     * Exam Page Controller add.
     *
     */
    public function edit(Request $req) 
    {
        $examPageDetails = $this->model->find(base64_decode($req->id));
        if($examPageDetails){
          $exam_types = $this->examTypeModel->select('id','exam_type')->where('status',1)->orderBy('id')->get();
          $states = $this->stateModel->orderBy('name','ASC')->get();
          $exam_names = $this->examNameModel->where('exam_type_id', $examPageDetails->exam_type_id)->orderBy('exam_name', 'ASC')->get();
          //echo '<pre>';print_r($coach_sub_cat_list);die;   
          return view('admin.pages.website_management.exam_page.add')
                  ->withExamPageDetails($examPageDetails)
                  ->withExamTypes($exam_types)
                  ->withExamNames($exam_names)
                  ->withStates($states);
        } else {
          return redirect(route('admin.website-management.exam-page'));
        }
    }

    /**
     * Get details method.
     *
     * @param $req
     *
     * @return json
     */
    public function get_details(Request $req) 
    {
        $html = '';
        $exam_type_html = '';
        $total_test = 0;
        $total_question = 0;
        $test_taken = 0;
        if($req->post()){
            //dd($req->post());
            if($req->type == 1){
                $datas = $this->cityModel->where('state_id', $req->id)->orderBy('city', 'ASC')->get();
                $html .= '<option value="">Select City</option>';
                if($datas){
                    foreach ($datas as $key => $value) {
                        $html .= '<option value="'.$value->id.'">'.$value->city.'</option>';
                    }
                }
            } else if($req->type == 2){
                $datas = $this->coachingMasterModel->join('coaching_exam_types','coaching_exam_types.coaching_id','=','coaching_masters.id')->where('city_id', $req->id)->where('exam_type_id', $req->exam_type)->where('is_deleted', 0)->orderBy('coaching_name', 'ASC')->select('*','coaching_masters.id')->get();
                $html .= '<option value="">Select Coaching</option>';
                if($datas){
                    foreach ($datas as $key => $value) {
                        $html .= '<option value="'.$value->id.'">'.$value->coaching_name.'</option>';
                    }
                }
            } else if($req->type == 3){
                $datas = $this->examNameModel->where('exam_type_id', $req->id)->orderBy('exam_name', 'ASC')->get();
                $html .= '<option value="">Select Exam Name</option>';
                if($datas){
                    foreach ($datas as $key => $value) {
                        $html .= '<option value="'.$value->id.'">'.$value->exam_name.'</option>';

                    }
                }
            } else if($req->type == 4){
                $datas = $this->passModel->join('pass_types','passes.pass_type_id','=','pass_types.id')->where('coaching_id', $req->id)->orderBy('pass_type_name', 'ASC')->select('*','passes.id')->get();
                $html .= '<option value="">Select Coaching</option>';
                if($datas){
                    foreach ($datas as $key => $value) {
                        $html .= '<option value="'.$value->id.'">'.$value->pass_type_name.'</option>';
                    }
                }
            } else if($req->type == 5){
                $total_test = $this->testModel->where('exam_name_id', $req->id)->count();
                $total_question = $this->testModel->join('test_questions','test_questions.test_id','=','tests.id')->where('exam_name_id', $req->id)->count();
                $test_taken = $this->testModel->join('test_results','test_results.test_id','=','tests.id')->where('exam_name_id', $req->id)->count();
                $datas = $this->examCategoryModel->join('exam_infos','exam_categories.exam_info_id','=','exam_infos.id')->where('exam_name_id', $req->id)->orderBy('category_name', 'ASC')->select('*','exam_categories.id')->get();
                $html .= '<option value="">Select Category</option>';
                if($datas){
                    foreach ($datas as $key => $value) {
                        $html .= '<option value="'.$value->id.'">'.$value->category_name.'</option>';
                    }
                }
            } else if($req->type == 6){
                $datas = $this->packageManageListingModel->where(['package_tag_id'=> $req->id, 'is_published'=>1])->first();
                $html .= '';
                if($datas){
                    if($datas->package_type == 1){
                        $packages = $this->packageManageListingModel->join('test_packages','test_packages.id','=','package_manage_listings.package_id')->select('*','test_packages.id')->where('package_tag_id', $req->exam_page_tag)->get();
                        foreach ($packages as $key => $value) {
                            $html .= '<option value="'.$value->id.'">'.$value->package_name.'&nbsp;&nbsp;&nbsp; Ranking: '.$value->order_display.'</option>';
                        }
                    } elseif($datas->package_type == 2){
                        $packages = $this->packageManageListingModel->join('practice_sets','practice_sets.id','=','package_manage_listings.package_id')->select('*','practice_sets.id')->where('package_tag_id', $req->exam_page_tag)->get();
                        foreach ($packages as $key => $value) {
                            $html .= '<option value="'.$value->id.'">'.$value->set_name.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ranking: '.$value->order_display.'</option>';
                        }
                    } else {
                        $packages = $this->packageManageListingModel->join('quizzes','quizzes.id','=','package_manage_listings.package_id')->select('*','quizzes.id')->where('package_tag_id', $req->exam_page_tag)->orderBy('order_display','ASC')->get();
                        foreach ($packages as $key => $value) {
                            $html .= '<option value="'.$value->id.'">'.$value->quiz_name.'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ranking: '.$value->order_display.'</option>';
                        }
                    }
                }
            }
            $response = array('status'=>200, 'message'=>'success', 'result'=>$html, 'exam_type_html'=>$exam_type_html, 'total_test'=>$total_test, 'total_question'=>$total_question, 'test_taken'=>$test_taken); 
        } else {
            $response = array('status'=>201, 'message'=>'Some error occured', 'result'=>$html, 'exam_type_html'=>$exam_type_html, 'total_test'=>$total_test, 'total_question'=>$total_question, 'test_taken'=>$test_taken); 
        }
        return response()->json($response);
    }

    /**
     * Save exam page method.
     *
     * @param $req
     *
     * @return json
     */
    public function save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'exam_type' => 'required',
                'exam_name' => 'required',
                'total_test' => 'required',
                'total_question' => 'required',
                'test_taken' => 'required',
                'brief_description' => 'required',
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              if(!$req->edit_id){
                $exist = $this->model->where('exam_name_id', $req->exam_name)->first();
                if($exist){
                  $response = array('status'=>201, 'message'=>'This exam name page already added', 'result'=>[]);
                } else {
                  $insert_arr = [
                      'exam_type_id' => $req->exam_type,
                      'exam_name_id' => $req->exam_name,
                      'total_test' => $req->total_test,
                      'total_question' => $req->total_question,
                      'test_taken' => $req->test_taken,
                      'test_taken' => $req->test_taken,
                      'brief' => $req->brief_description,
                  ];
                  $insert = $this->model->create($insert_arr);
                  $response = array('status'=>200, 'message'=>'Sucess', 'result'=>base64_encode($insert->id));
                }
              } else {
                $insert_arr = [
                    'exam_type_id' => $req->exam_type,
                    'exam_name_id' => $req->exam_name,
                    'total_test' => $req->total_test,
                    'total_question' => $req->total_question,
                    'test_taken' => $req->test_taken,
                    'test_taken' => $req->test_taken,
                    'brief' => $req->brief_description,
                ];
                $update = $this->model->where('id',base64_decode($req->edit_id))->update($insert_arr);
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
              }
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Change status exam page list method.
     *
     */
    public function change_status(Request $req) 
    {
      if($req->post()){
        $id = $req->id;
        $details = $this->model->find(base64_decode($id));
        $status = 0;
        if($details->status == 0){
          $status = 1;
        }
        $this->model->where('id', base64_decode($id))->update(['status' => $status,'publish_date'=>date('Y-m-d')]);
        $response = array('status'=>200, 'message'=>'success', 'result'=>date('d-m-Y'));    
        return response()->json($response);
      }       
    }


    /**
     * Get exam information list method.
     *
     * @param $req
     *
     * @return json
     */
    public function getExamInfo(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>$req->exam_page_id])->first();
        $category_list = $this->examPageInfoCategoryModel->where(['exam_page_id'=>$examPageDetails->id])->orderBy('category_name', 'ASC')->get();
        $html = '';
        $infohtml = '';
        if(count($category_list)>0){
            foreach ($category_list as $key => $list) {
                $html .= '<li class="'.(($key == 0) ? 'resp-tab-active': '').' exam_category_li" data-id="'.base64_encode($list->id).'"  data-name="'.$list->category_name.'">
                            <span>'.$list->category_name.'</span> 
                            <a class="action-btn exam_page_cat_edit" href="javascript:void(0)"><img src="'.asset('admin/images/pen.svg').'" alt=""></a> 
                            <a href="javascript:void(0)" class="exam_page_cat_delete"><img src="'.asset('admin/images/bin.svg').'"  alt=""></a>
                          </li>';
            }
            $information = $this->examPageInfoInformationModel->where('exam_page_info_category_id', $category_list[0]->id)->first();
            if($information){
              $infohtml = $information->information_text;
            }
        } else {
            $html .= '<li>
                        <span>No category found...</span>
                    </li>';
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html, 'infohtml'=>$infohtml);   
        return response()->json($response);
    }

    /**
     * Exam category save method.
     *
     * @param $req
     *
     * @return json
     */
    public function exam_categoty_save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'exam_info_category' => 'required',
                'exam_page_edit_id' => 'required',
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              if(!$req->edit_id){
                $examPageDetails = $this->model->where('id', $req->exam_page_edit_id)->first();
                if($examPageDetails){
                   $insert_arr = [
                      'exam_page_id' => $examPageDetails->id,
                      'category_name' => $req->exam_info_category
                  ];
                  $insert = $this->examPageInfoCategoryModel->create($insert_arr);
                  $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
                }
              } else {
                $insert_arr = [
                    'category_name' => $req->exam_info_category
                ];
                $update = $this->examPageInfoCategoryModel->where('id',base64_decode($req->edit_id))->update($insert_arr);
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
              }
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Delete Info category method.
     *
     * @param $req
     *
     * @return json
     */
    public function info_cat_delete(Request $req) 
    {
        if($req->post()){
            $info = $this->examPageInfoInformationModel->where(['exam_page_info_category_id'=>base64_decode($req->id)])->delete();
            $delete = $this->examPageInfoCategoryModel->where('id', base64_decode($req->id))->delete();
            $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            return response()->json($response);           
        }        
    }

    /**
     * Import exam info method.
     *
     * @param $req
     *
     * @return json
     */
    public function import_exam_info(Request $req) 
    {
        $info = $this->examDetailsModel->where(['exam_category_id'=>$req->exam_cat_id])->first();
        $html = '';
        if($info){
          $html = $info->details;
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html);   
        return response()->json($response);
    }

    /**
     * Get exam details method.
     *
     * @param $req
     *
     * @return json
     */
    public function get_exam_details(Request $req) 
    {
        $info = $this->examPageInfoInformationModel->where(['exam_page_info_category_id'=>base64_decode($req->exam_cat_id)])->first();
        $html = '';
        if($info){
          $html = $info->information_text;
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html);   
        return response()->json($response);
    }

    /**
     * Save exam information method.
     *
     * @param $req
     *
     * @return json
     */
    public function exam_details_save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'category_id' => 'required',
                'exam_details' => 'required',
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              $examPageDetails = $this->examPageInfoInformationModel->where('exam_page_info_category_id', base64_decode($req->category_id))->first();
              if(!$examPageDetails){
                 $insert_arr = [
                    'exam_page_info_category_id' => base64_decode($req->category_id),
                    'information_text' => $req->exam_details
                ];
                $insert = $this->examPageInfoInformationModel->create($insert_arr);
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
              } else {
                $insert_arr = [
                    'information_text' => $req->exam_details
                ];
                $update = $this->examPageInfoInformationModel->where('exam_page_info_category_id',base64_decode($req->category_id))->update($insert_arr);
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
              }
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Get all recomended list method.
     *
     */
    public function getRecomended(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>$req->exam_page_id])->first();
        $recomended_list = $this->examPagePassModel
                                        ->select(DB::raw("*,exam_page_passes.id as id, GROUP_CONCAT(DISTINCT exam_type) exam_type, no_of_product"))
                                        ->leftJoin('coaching_masters','exam_page_passes.coaching_id','=','coaching_masters.id')
                                        ->leftJoin('coaching_exam_types','coaching_exam_types.coaching_id','=','coaching_masters.id')
                                        ->leftJoin('exam_types','coaching_exam_types.exam_type_id','=','exam_types.id')
                                        ->leftJoin('passes','passes.id','=','exam_page_passes.pass_id')
                                        ->leftJoin('pass_types','pass_types.id','=','passes.pass_type_id')
                                        ->where('exam_page_id', $examPageDetails->id)
                                        ->groupBy('exam_page_passes.id')
                                        ->orderBy('exam_page_passes.display_order','ASC');
        $recomended_list = $recomended_list->limit(10)->get();
        $recomended_total = $this->examPagePassModel
                                        ->select(DB::raw("*,exam_page_passes.id as id, GROUP_CONCAT(DISTINCT exam_type) exam_type"))
                                        ->leftJoin('coaching_masters','exam_page_passes.coaching_id','=','coaching_masters.id')
                                        ->leftJoin('coaching_exam_types','coaching_exam_types.coaching_id','=','coaching_masters.id')
                                        ->leftJoin('exam_types','coaching_exam_types.exam_type_id','=','exam_types.id')
                                        ->leftJoin('passes','passes.id','=','exam_page_passes.pass_id')
                                        ->leftJoin('pass_types','pass_types.id','=','passes.pass_type_id')
                                        ->where('exam_page_id', $examPageDetails->id)
                                        ->groupBy('exam_page_passes.id')
                                        ->orderBy('exam_page_passes.display_order','ASC');
        $recomended_total = $recomended_total->get()->count();
        $html = '';
        $no_of_product = count($recomended_list);
        if(count($recomended_list)>0){
            foreach ($recomended_list as $key => $list) {
                $html .= '<li data-id="'. $list->id .'"  id="pass-'.$list->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key+1).'.</span>
                                <div class="list equal">
                                  <span>'.$list->coaching_name.'</span>
                                  <span>'.$list->exam_type.'</span>
                                  <span>Pass Type: '.$list->pass_type_name.'</span>
                                </div>                    
                                <a class="action-btn remove_recomended" href="javascript:void(0)" data-id="'.$list->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
            }
        } else {
            $html .= '<li data-id=""  id="">
                          <div class="list-content">
                                No records found...
                              </div>
                        </li>';
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html, 'total_data'=>$recomended_total, 'no_of_product'=>$no_of_product);   
        return response()->json($response);
    }

    /**
     * Recomended display order update method.
     *
     * @param $req
     *
     * @return json
     */
    public function update_recomended_order(Request $req) 
    {
        if($req->post()){
          if($req->pass){
              $data = $this->examPagePassModel->whereIn('id',$req->pass)->select('display_order')->orderBy('display_order','ASC')->get();
              foreach ($req->pass as $key => $item) {
                  $update = $this->examPagePassModel->where('id', $item)->update(['display_order' => $data[$key]->display_order]);
              } 
          }
          $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);   
          return response()->json($response);
        }
    }
    
    /**
     * Save recomended pass method.
     *
     * @param $req
     *
     * @return json
     */
    public function recomended_save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'exam_page_recom_state' => 'required',
                'exam_page_recom_city' => 'required',
                'exam_page_edit_id' => 'required',
                'exam_page_recom_coaching_name' => 'required',
                'exam_page_recom_coaching_name' => 'required',
                'exam_page_recom_pass_type' => 'required',
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
                $examPageDetails = $this->model->where('id', $req->exam_page_edit_id)->first();
                $total_data = $this->examPagePassModel->where('exam_page_id', $examPageDetails->id)->orderBy('display_order','DESC')->first();
                $exist = $this->examPagePassModel->where('exam_page_id', $examPageDetails->id)->where(['coaching_id' => $req->exam_page_recom_coaching_name,
                    'pass_id' => $req->exam_page_recom_pass_type])->count();
                if($exist == 0){
                  $total_record = $this->examPagePassModel->where('exam_page_id', $examPageDetails->id)->count();
                  if($total_record < $req->exam_page_recom_no_product){
                    $insert_arr = [
                        'exam_page_id' => $examPageDetails->id,
                        'coaching_id' => $req->exam_page_recom_coaching_name,
                        'pass_id' => $req->exam_page_recom_pass_type,
                        'display_order' => isset($total_data) ? $total_data->display_order+1 : 1,
                        'no_of_product' => $req->exam_page_recom_no_product,
                        'exam_type_id' => $examPageDetails->exam_type_id,
                        'exam_name_id' => $examPageDetails->exam_name_id,
                    ];
                    $insert = $this->examPagePassModel->create($insert_arr);
                    $update = $this->examPagePassModel->where('id','>','0')->update(['no_of_product' => $req->exam_page_recom_no_product]);
                    $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
                  } else {
                    $response = array('status'=>201, 'message'=>'No of product add limit exceeds, with the limit you have selected', 'result'=>[]);
                  }
                } else {
                    $response = array('status'=>201, 'message'=>'This coaching pass already added', 'result'=>[]);
                }
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Remove recomended pass method.
     *
     * @param $req
     *
     * @return json
     */
    public function remove_recomended(Request $req) 
    {
        if($req->post()){
            $delete = $this->examPagePassModel->where('id', $req->id)->delete();
            $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            return response()->json($response);           
        }        
    }

    /**
     * Get all faq list method.
     *
     * @param $req
     *
     * @return json
     */
    public function getFaq(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>$req->exam_page_id])->first();
        $fag_have = $this->examPageFaqModel->where('exam_page_id', $examPageDetails->id)->first();
        if(!$fag_have){
          $import_details = $this->manageFaqModel->join('manage_faq_types', 'manage_faq_types.faq_section_id','=','manage_faqs.id')->join('manage_faq_details', 'manage_faq_details.manage_faq_id','=','manage_faqs.id')->where(['manage_faq_types.exam_type_id'=>$examPageDetails->exam_type_id, 'manage_faq_details.status'=>1,'section_exam_type'=>3])->get();
          $total_data = $this->examPageFaqModel->orderBy('display_order','DESC')->first();
          $order = 0;
          if(count($import_details)>0){
            foreach ($import_details as $key => $value) {
              $exist = $this->examPageFaqModel->where('faq_title', $value->details_name)->where('exam_page_id', $value->details_name)->first();
              if(!$exist){
                if($key==0){
                    $order = isset($total_data) ? $total_data->display_order+1 : 1;
                  } else {
                    $order = $order + 1;
                  }
                  $insert_arr[] = [
                      'exam_page_id' => $examPageDetails->id,
                      'faq_title' => $value->details_name,
                      'faq_content' => $value->details_text,
                      'display_order' => $order
                  ];
                }
              }
              $insert = $this->examPageFaqModel->insert($insert_arr);
          }
        }
        
        $faq_list = $this->examPageFaqModel->where('exam_page_id', $examPageDetails->id)->limit(10)->orderBy('display_order', 'ASC')->get();
        $faq_total = $this->examPageFaqModel->count();
        $html = '';
        if(count($faq_list)>0){
            foreach ($faq_list as $key => $list) {
                $html .= '<li data-id="'.$list->id.'" id="faq-'.$list->id.'" class="ui-sortable-handle">
                                <div class="list-content">
                                  <div class="list">
                                    <span>'.$list->faq_title.'</span>
                                  </div>
                                  <span class="switchToggle">
                                      <input type="checkbox" id="switch'.$list->id.'" data-id="'.$list->id.'" class="faqStatus" value="1" ';
                                      if($list->status == 1){
                                        $html .= 'checked';
                                      }
                                      $html .= '>
                                      <label for="switch'.$list->id.'">Toggle</label>
                                  </span>
                                  <a href="'.route('admin.website-management.exam-page.edit_faq', base64_encode($list->id)).'" class="action-btn"><img src="'.asset('admin/images/pen.svg').'" alt=""></a>
                                  <a class="action-btn remove_faq" href="javascript:void(0)" data-id="'.$list->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                                </div>
                              </li>';
            }
        } else {
            $html .= '<li>
                        <div class="list-content">
                          <div class="list">No faq found...</div>
                        </div>
                    </li>';
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html, 'total_data'=>$faq_total);   
        return response()->json($response);
    }

    /**
     * Add faq data method.
     *
     */
    public function add_faq(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>$req->exam_page_id])->first();
        if($examPageDetails){
          $response = array('status'=>200, 'message'=>'Sucess', 'result'=>base64_encode($examPageDetails->id));  
        } else {
          $response = array('status'=>201, 'message'=>'Exam details not found', 'result'=>[]);  
        }
        return response()->json($response);
    }

    /**
     * Add faq page method.
     *
     */
    public function add_faq_page(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>base64_decode($req->exam_page_id)])->first();
        if($examPageDetails){
          return view('admin.pages.website_management.exam_page.add_faq')
                    ->withExamPageId($examPageDetails->id);
        } else {
          return redirect(route('admin.website-management.exam-page.add'));
        }
    }

    /**
     * Save faq exam method.
     *
     * @param $req
     *
     * @return json
     */
    public function save_faq(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'faq_title' => 'required',
                'faq_content' => 'required',
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              if(!$req->edit_id){
                $examPageDetails = $this->model->where(['id'=>($req->exam_page_id)])->first();
                $total_data = $this->examPageFaqModel->orderBy('display_order','DESC')->first();
                $insert_arr = [
                    'exam_page_id' => $examPageDetails->id,
                    'faq_title' => $req->faq_title,
                    'faq_content' => $req->faq_content,
                    'display_order' => isset($total_data) ? $total_data->display_order+1 : 1
                ];
                $insert = $this->examPageFaqModel->create($insert_arr);
              } else {
                $insert_arr = [
                    'faq_title' => $req->faq_title,
                    'faq_content' => $req->faq_content,
                ];
                $update = $this->examPageFaqModel->where('id',($req->edit_id))->update($insert_arr);
              }
              $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
                
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Remove faq exam method.
     *
     * @param $req
     *
     * @return json
     */
    public function remove_faq(Request $req) 
    {
        if($req->post()){
            $delete = $this->examPageFaqModel->where('id', $req->id)->delete();
            $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            return response()->json($response);           
        }        
    }

    /**
     * Edit faq list method.
     *
     */
    public function edit_faq(Request $req) 
    {
      if($req->id){
        $id = base64_decode($req->id);
        $faqDetails = $this->examPageFaqModel->find($id);
        return view('admin.pages.website_management.exam_page.add_faq')
                  ->withFaqDetails($faqDetails);
      } else {
        return redirect('admin.website-management.exam-page');
      }
    }

    /**
     * Change status faq list method.
     *
     */
    public function change_faq_status(Request $req) 
    {
      if($req->post()){
        $id = $req->id;
        $status = $req->status;
        $this->examPageFaqModel->where('id', $id)->update(['status' => $status]);
        $response = array('status'=>200, 'message'=>'success', 'result'=>[]);    
        return response()->json($response);
      }       
    }

    /**
     * Faq display order update method.
     *
     * @param $req
     *
     * @return json
     */
    public function update_faq_order(Request $req) 
    {
        if($req->post()){
          if($req->faq){
              $data = $this->examPageFaqModel->whereIn('id',$req->faq)->select('display_order')->orderBy('display_order','ASC')->get();
              foreach ($req->faq as $key => $item) {
                  $update = $this->examPageFaqModel->where('id', $item)->update(['display_order' => $data[$key]->display_order]);
              } 
          }
          $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);   
          return response()->json($response);
        }
    }

    /**
     * Get package section list method.
     *
     * @param $req
     *
     * @return json
     */
    public function getPackageExam(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>$req->exam_page_id])->first();
        $section_list = $this->examPageSectionModel->where(['exam_page_id'=>$examPageDetails->id])->orderBy('section_name', 'ASC')->get();
        $html = '';
        $infohtml = '';
        $tag_html = '<option value="">Select Tag</option>';
        if(count($section_list)>0){
            foreach ($section_list as $key => $list) {
                $html .= '<li class="'.(($key == 0) ? 'resp-tab-active section_active': '').' exam_page_section_li" data-id="'.base64_encode($list->id).'"  data-name="'.$list->section_name.'" data-type="'.$list->product_type.'">
                            <span>'.$list->section_name.'</span> 
                            <a class="action-btn package_section_edit" href="javascript:void(0)"><img src="'.asset('admin/images/pen.svg').'" alt=""></a> 
                            <a href="javascript:void(0)" class="exam_page_section_delete"><img src="'.asset('admin/images/bin.svg').'"  alt=""></a>
                          </li>';
            }
            
            if($section_list[0]->product_type == 1){
                $tag_list = $this->coachingTagModel->where(['exam_type_id'=>$examPageDetails->exam_type_id, 'exam_name_id'=>$examPageDetails->exam_name_id, 'category'=>2, 'package_type'=>$section_list[0]->product_type])->get();
                $products = $this->examPageSectionProductModel->join('test_packages','test_packages.id','=','exam_page_section_products.package_id')->join('coaching_masters','coaching_masters.id','=','test_packages.coaching_id')->join('package_manage_listings','exam_page_section_products.package_id','=','package_manage_listings.package_id')->where('exam_page_section_id', $section_list[0]->id)->orderBy('exam_page_section_products.display_order');
                if($req->tag_id){
                    $products = $products->where('exam_page_section_products.tag_id', $req->tag_id);
                }
                $products = $products->groupBy('exam_page_section_products.id')->get();

                if(count($products)){
                    foreach ($products as $key1 => $value) {
                        $infohtml .= '<li data-id="'. $value->display_order .'"  id="package-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list equal">
                                  <span>'.$value->package_name.'</span>
                                  <span>'.$value->coaching_name.'</span>
                                  <span>Ranking: '.$value->order_display.'</span>
                                </div>                    
                                <a class="action-btn remove_product" href="javascript:void(0)" data-id="'.$value->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
                    }
                } else {
                    $infohtml .= '<li data-id=""  id="">
                                  <div class="list-content">
                                        No records found...
                                      </div>
                                </li>';
                }
            } elseif($section_list[0]->product_type == 2){
                $tag_list = $this->coachingTagModel->where(['exam_type_id'=>$examPageDetails->exam_type_id,'category'=>2, 'package_type'=>$section_list[0]->product_type])->get();
                $products = $this->examPageSectionProductModel->join('practice_sets','practice_sets.id','=','exam_page_section_products.package_id')->join('coaching_masters','coaching_masters.id','=','practice_sets.coaching_id')->join('package_manage_listings','exam_page_section_products.package_id','=','package_manage_listings.package_id')->where('exam_page_section_id', $section_list[0]->id)->orderBy('exam_page_section_products.display_order');
                if($req->tag_id){
                    $products = $products->where('exam_page_section_products.tag_id', $req->tag_id);
                }
                $products = $products->groupBy('exam_page_section_products.id')->get();

                if(count($products)){
                    foreach ($products as $key1 => $value) {
                        $infohtml .= '<li data-id="'. $value->display_order .'"  id="package-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list equal">
                                  <span>'.$value->set_name.'</span>
                                  <span>'.$value->coaching_name.'</span>
                                  <span>Ranking: '.$value->order_display.'</span>
                                </div>                    
                                <a class="action-btn remove_product" href="javascript:void(0)" data-id="'.$value->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
                    }
                } else {
                    $infohtml .= '<li data-id=""  id="">
                                  <div class="list-content">
                                        No records found...
                                      </div>
                                </li>';
                }
            } else {
                $tag_list = $this->coachingTagModel->where(['exam_type_id'=>$examPageDetails->exam_type_id,'category'=>2, 'package_type'=>$section_list[0]->product_type])->get();
                $products = $this->examPageSectionProductModel->join('quizzes','quizzes.id','=','exam_page_section_products.package_id')->join('coaching_masters','coaching_masters.id','=','quizzes.coaching_id')->join('package_manage_listings','exam_page_section_products.package_id','=','package_manage_listings.package_id')->where('exam_page_section_id', $section_list[0]->id)->where('package_type', 3)->orderBy('exam_page_section_products.display_order');
                if($req->tag_id){
                    $products = $products->where('exam_page_section_products.tag_id', $req->tag_id);
                }
                $products = $products->groupBy('exam_page_section_products.id')->get();

                if(count($products)){
                    foreach ($products as $key1 => $value) {
                        $infohtml .= '<li data-id="'. $value->display_order .'"  id="package-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list equal">
                                  <span>'.$value->quiz_name.'</span>
                                  <span>'.$value->coaching_name.'</span>
                                  <span>Ranking: '.$value->order_display.'</span>
                                </div>                    
                                <a class="action-btn remove_product" href="javascript:void(0)" data-id="'.$value->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
                    }
                } else {
                    $infohtml .= '<li data-id=""  id="">
                                  <div class="list-content">
                                        No records found...
                                      </div>
                                </li>';
                }
            }
            
            if(count($tag_list)>0){                
                foreach ($tag_list as $key => $list) {
                    $select = '';
                    if(isset($req->tag_id)){
                      if($req->tag_id == $list->id){
                        $select = 'selected';
                      }
                    }
                    $tag_html .= '<option value="'.$list->id.'" '.$select.'>'.$list->tag_name.'</option>';
                }
            }
        } else {
            $html .= '<li>
                        <span>No section found...</span>
                    </li>';
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html, 'infohtml'=>$infohtml, 'tag_html'=>$tag_html);   
        return response()->json($response);
    }

    /**
     * Exam section save method.
     *
     * @param $req
     *
     * @return json
     */
    public function section_save(Request $req) 
    {
        if($req->post()){
            if(!$req->edit_id){
                $validator = Validator::make($req->all(), [
                    'exam_page_section_name' => 'required',
                    'exam_page_product_type' => 'required',
                    'exam_page_id' => 'required',
                ]);
            } else {
                $validator = Validator::make($req->all(), [
                    'exam_page_section_name' => 'required',
                    'exam_page_id' => 'required',
                ]);
            }
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              if(!$req->edit_id){
                $examPageDetails = $this->model->where('id', $req->exam_page_id)->first();
                if($examPageDetails){
                   $insert_arr = [
                      'exam_page_id' => $examPageDetails->id,
                      'section_name' => $req->exam_page_section_name,
                      'product_type' => $req->exam_page_product_type
                  ];
                  $insert = $this->examPageSectionModel->create($insert_arr);
                  $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
                }
              } else {
                $insert_arr = [
                    'section_name' => $req->exam_page_section_name
                ];
                $update = $this->examPageSectionModel->where('id',base64_decode($req->edit_id))->update($insert_arr);
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
              }
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Delete section method.
     *
     * @param $req
     *
     * @return json
     */
    public function section_delete(Request $req) 
    {
        if($req->post()){
            $info = $this->examPageSectionProductModel->where(['exam_page_section_id'=>base64_decode($req->id)])->first();
            if(!$info){
                $delete = $this->examPageSectionModel->where('id', base64_decode($req->id))->delete();
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            } else {
                $response = array('status'=>201, 'message'=>'This section has products, so cannot be deleted', 'result'=>[]);
            }
            return response()->json($response);           
        }        
    }

    /**
     * Delete section product method.
     *
     * @param $req
     *
     * @return json
     */
    public function section_product_delete(Request $req) 
    {
        if($req->post()){
            $info = $this->examPageSectionProductModel->where(['id'=>base64_decode($req->id)])->delete();
            $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            return response()->json($response);           
        }        
    }

    /**
     * Get section product method.
     *
     * @param $req
     *
     * @return json
     */
    public function get_section_product(Request $req) 
    {
        $sectionDetails = $this->examPageSectionModel->join('exam_pages','exam_pages.id','=','exam_page_sections.exam_page_id')->where('exam_page_sections.id', base64_decode($req->section_id))->select('*','exam_page_sections.id')->first();
        $tag_html = '<option value="">Select Tag</option>';
        $html = '';
        if($sectionDetails){
            if($sectionDetails->product_type == 1){
                $tag_list = $this->coachingTagModel->where(['exam_type_id'=>$sectionDetails->exam_type_id, 'exam_name_id'=>$sectionDetails->exam_name_id, 'category'=>2, 'package_type'=>$sectionDetails->product_type])->get();
                if(count($tag_list)>0){
                    foreach ($tag_list as $key => $list) {
                        $select = '';
                        if(isset($req->tag_id)){
                          if($req->tag_id == $list->id){
                            $select = 'selected';
                          }
                        }
                        $tag_html .= '<option value="'.$list->id.'" '.$select.'>'.$list->tag_name.'</option>';
                    }
                } 
                $products = $this->examPageSectionProductModel->join('test_packages','test_packages.id','=','exam_page_section_products.package_id')->join('coaching_masters','coaching_masters.id','=','test_packages.coaching_id')->join('package_manage_listings','exam_page_section_products.package_id','=','package_manage_listings.package_id')->where('exam_page_section_id', $sectionDetails->id)->where('package_type', 1)->orderBy('exam_page_section_products.display_order');
                if($req->tag_id){
                    $products = $products->where('exam_page_section_products.tag_id', $req->tag_id);
                }
                $products = $products->groupBy('exam_page_section_products.id')->get();
                if(count($products)){
                    foreach ($products as $key1 => $value) {
                        $html .= '<li data-id="'. $value->display_order .'"  id="package-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list equal">
                                  <span>'.$value->package_name.'</span>
                                  <span>'.$value->coaching_name.'</span>
                                  <span>Ranking: '.$value->order_display.'</span>
                                </div>                    
                                <a class="action-btn remove_product" href="javascript:void(0)" data-id="'.$value->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
                    }
                } else {
                    $html .= '<li data-id=""  id="">
                                  <div class="list-content">
                                        No records found...
                                      </div>
                                </li>';
                }
            } elseif($sectionDetails->product_type == 2){
                $tag_list = $this->coachingTagModel->where(['exam_type_id'=>$sectionDetails->exam_type_id, 'category'=>2, 'package_type'=>$sectionDetails->product_type])->get();
                if(count($tag_list)>0){
                    foreach ($tag_list as $key => $list) {
                        $select = '';
                        if(isset($req->tag_id)){
                          if($req->tag_id == $list->id){
                            $select = 'selected';
                          }
                        }
                        $tag_html .= '<option value="'.$list->id.'" '.$select.'>'.$list->tag_name.'</option>';
                    }
                }
                $products = $this->examPageSectionProductModel->join('practice_sets','practice_sets.id','=','exam_page_section_products.package_id')->join('coaching_masters','coaching_masters.id','=','practice_sets.coaching_id')->join('package_manage_listings','exam_page_section_products.package_id','=','package_manage_listings.package_id')->where('exam_page_section_id', $sectionDetails->id)->where('package_type', 2)->orderBy('exam_page_section_products.display_order');
                if($req->tag_id){
                    $products = $products->where('exam_page_section_products.tag_id', $req->tag_id);
                }
                $products = $products->groupBy('exam_page_section_products.id')->get();
                if(count($products)){
                    foreach ($products as $key1 => $value) {
                        $html .= '<li data-id="'. $value->display_order .'"  id="package-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list equal">
                                  <span>'.$value->set_name.'</span>
                                  <span>'.$value->coaching_name.'</span>
                                  <span>Ranking: '.$value->order_display.'</span>
                                </div>                    
                                <a class="action-btn remove_product" href="javascript:void(0)" data-id="'.$value->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
                    }
                } else {
                    $html .= '<li data-id=""  id="">
                                  <div class="list-content">
                                        No records found...
                                      </div>
                                </li>';
                }
            } else {
                $tag_list = $this->coachingTagModel->where(['exam_type_id'=>$sectionDetails->exam_type_id, 'category'=>2, 'package_type'=>$sectionDetails->product_type])->get();
                if(count($tag_list)>0){
                    foreach ($tag_list as $key => $list) {
                        $select = '';
                        if(isset($req->tag_id)){
                          if($req->tag_id == $list->id){
                            $select = 'selected';
                          }
                        }
                        $tag_html .= '<option value="'.$list->id.'" '.$select.'>'.$list->tag_name.'</option>';
                    }
                }
                $products = $this->examPageSectionProductModel->join('quizzes','quizzes.id','=','exam_page_section_products.package_id')->join('coaching_masters','coaching_masters.id','=','quizzes.coaching_id')->join('package_manage_listings','quizzes.id','=','package_manage_listings.package_id')->where('exam_page_section_id', $sectionDetails->id)->where('package_type', 3)->orderBy('exam_page_section_products.display_order');
                if($req->tag_id){
                    $products = $products->where('exam_page_section_products.tag_id', $req->tag_id);
                }
                $products = $products->groupBy('exam_page_section_products.id')->get();
                if(count($products)){
                    foreach ($products as $key1 => $value) {
                        $html .= '<li data-id="'. $value->display_order .'"  id="package-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list equal">
                                  <span>'.$value->quiz_name.'</span>
                                  <span>'.$value->coaching_name.'</span>
                                  <span>Ranking: '.$value->order_display.'</span>
                                </div>                    
                                <a class="action-btn remove_product" href="javascript:void(0)" data-id="'.$value->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
                    }
                } else {
                    $html .= '<li data-id=""  id="">
                                  <div class="list-content">
                                        No records found...
                                      </div>
                                </li>';
                }
            }
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html, 'tag_html'=>$tag_html);   
        return response()->json($response);
    }

    /**
     * Save section product method.
     *
     * @param $req
     *
     * @return json
     */
    public function section_product_save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'section_id' => 'required',
                'exam_page_tag' => 'required',
                'exam_page_package' => 'required'
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
                if(!$req->edit_id){
                    $exist = $this->examPageSectionProductModel->where('exam_page_section_id', base64_decode($req->section_id))->where('package_id', $req->exam_page_package)->first();
                    if(!$exist){
                        $total_data = $this->examPageSectionProductModel->orderBy('display_order','DESC')->first();
                        $insert_arr = [
                            'exam_page_section_id' => base64_decode($req->section_id),
                            'tag_cat_id' => 2,
                            'tag_id' => $req->exam_page_tag,
                            'package_id' => $req->exam_page_package,
                            'display_order' => isset($total_data) ? $total_data->display_order+1 : 1
                        ];
                        $insert = $this->examPageSectionProductModel->create($insert_arr);
                        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
                    } else {
                        $response = array('status'=>201, 'message'=>'Package already added', 'result'=>[]);
                    }
                } else {
                    $exist = $this->examPageSectionProductModel->where('exam_page_section_id', base64_decode($req->section_id))->where('package_id', $req->exam_page_package)->where('id','!=',$req->edit_id)->first();
                    if(!$exist){
                        $insert_arr = [
                            'tag_id' => $req->exam_page_tag,
                            'package_id' => $req->exam_page_package
                        ];
                        $update = $this->examPageSectionProductModel->where('exam_page_section_id',base64_decode($req->section_id))->update($insert_arr);
                        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
                    }
                }
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Section product display order update method.
     *
     * @param $req
     *
     * @return json
     */
    public function section_product_order_update(Request $req) 
    {
        if($req->post()){
          if($req->faq){
              $data = $this->examPageSectionProductModel->whereIn('id',$req->faq)->select('display_order')->orderBy('display_order','ASC')->get();
              foreach ($req->faq as $key => $item) {
                  $update = $this->examPageSectionProductModel->where('id', $item)->update(['display_order' => $data[$key]->display_order]);
              } 
          }
          $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);   
          return response()->json($response);
        }
    }

    /**
     * Get all blog list method.
     *
     * @param $req
     *
     * @return json
     */
    public function getBlog(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>$req->exam_page_id])->first();
        $blog_list = $this->examPageBlogModel->where('exam_page_id', $examPageDetails->id)->limit(20)->orderBy('display_order', 'ASC')->get();
        $blog_total = $this->examPageBlogModel->count();
        $html = '';
        if(count($blog_list)>0){
            foreach ($blog_list as $key => $list) {
                $html .= '<tr id="blog-'.$list->id.'">
                                  <td>'.($key+1).'.</td>
                                  <td>'.$list->post_name.'</td>
                                  <td>
                                  <span class="avatar cover-image avatar-xl brround" data-image-src="'.asset('storage/exam_page_blog_image/'.$list->image).'" style="background: url('.asset('storage/exam_page_blog_image/'.$list->image).') center center;"></span>
                                  </td>
                                  <td>'.$list->author.'</td>
                                  <td>'.(($list->published_date) ? date('d-m-Y', strtotime($list->published_date)) : '').'</td>
                                  <td>
                                  <a class="action-btn" href="'.route('admin.website-management.exam-page.edit_blog', base64_encode($list->id)).'"><img src="'.asset('admin/images/pen.svg').'" alt="">
                                  <a class="action-btn remove_blog" href="javascript:void(0)" data-id="'.$list->id.'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                                  </td>
                        </tr>';
            }
        } else {
            $html .= '<tr id="">
                        <td colspan="6">No blog found...</td>
                    </tr>';
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html, 'total_data'=>$blog_total);   
        return response()->json($response);
    }

    /**
     * Add blog list method.
     *
     */
    public function add_blog(Request $req) 
    {
        $examPageDetails = $this->model->find(base64_decode($req->exam_page_id));
        return view('admin.pages.website_management.exam_page.add_blog')
                        ->withExamPageDetails($examPageDetails);
    }

    /**
     * Blog image upload method.
     *
     * @param $req
     *
     * @return json
     */
    public function blog_image_upload(Request $req){
      $filename = '';
      if($req->file('image')){
          if($req->file('image')->isValid()){                    
              $file = $req->file('image');
              if($file->getClientOriginalExtension() == 'jpeg' || $file->getClientOriginalExtension() == 'jpg' || $file->getClientOriginalExtension() == 'png' || $file->getClientOriginalExtension() == 'JPEG' || $file->getClientOriginalExtension() == 'JPG' || $file->getClientOriginalExtension() == 'PNG'){
                  $filename = time().str_random(5).'.'.$file->getClientOriginalExtension();
                  $path = 'exam_page_blog_image';
                  $destination = public_path('storage/exam_page_blog_image');
                  $upload_location = $path.'/'.$filename;
                  $img = Image::make($file->getRealPath());
                  $img->fit(250, 250, function ($constraint) {
                      $constraint->aspectRatio();
                  })->save($destination.'/'.$filename);
                  $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$filename);
              } else {
                $response = array('status'=>201, 'message'=>'Please choose image in JPEG, JPG, PNG format only', 'result'=>[]);
              }
          } else {
            $response = array('status'=>201, 'message'=>'Invalid image', 'result'=>[]);
          }
      }
      return response()->json($response);
    }

    /**
     * Save blog blog method.
     *
     * @param $req
     *
     * @return json
     */
    public function save_blog(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'post_name' => 'required',
                'url' => 'required',
                'author' => 'required',
                'published_date' => 'required'
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
                if(!$req->edit_id){
                    $total_data = $this->examPageBlogModel->orderBy('display_order','DESC')->first();
                    $insert_arr = [
                        'exam_page_id' => base64_decode($req->exam_page_id),
                        'post_name' => $req->post_name,
                        'url' => $req->url,
                        'author' => $req->author,
                        'image' => ($req->filename) ? $req->filename : '',
                        'published_date' => date('Y-m-d', strtotime(str_replace('/', '-', $req->published_date))),
                        'display_order' => isset($total_data) ? $total_data->display_order+1 : 1
                    ];
                    $insert = $this->examPageBlogModel->create($insert_arr);
                } else {
                    $blogDetails = $this->examPageBlogModel->find(base64_decode($req->edit_id));
                    $insert_arr = [
                        'post_name' => $req->post_name,
                        'url' => $req->url,
                        'author' => $req->author,
                        'image' => ($req->filename) ? $req->filename : '',
                        'published_date' => date('Y-m-d', strtotime(str_replace('/', '-', $req->published_date))),
                    ];
                    if($req->filename){
                      $insert_arr['image'] = $req->filename;
                      @unlink(public_path('storage/exam_page_blog_image/'.$blogDetails->profile_image));
                    }
                    $update = $this->examPageBlogModel->where('id',base64_decode($req->edit_id))->update($insert_arr);
                }
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>($req->exam_page_id));
                
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Remove blog blog method.
     *
     * @param $req
     *
     * @return json
     */
    public function remove_blog(Request $req) 
    {
        if($req->post()){
            $delete = $this->examPageBlogModel->where('id', $req->id)->delete();
            $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            return response()->json($response);           
        }        
    }

    /**
     * Edit blog list method.
     *
     */
    public function edit_blog(Request $req) 
    {
      if($req->id){
        $id = base64_decode($req->id);
        $blogDetails = $this->examPageBlogModel->find($id);
        return view('admin.pages.website_management.exam_page.add_blog')
                  ->withBlogDetails($blogDetails);
      } else {
        return redirect('admin.website-management.exam-page');
      }
    }

    /**
     * View blog list method.
     *
     */
    public function view_blog(Request $req) 
    {
      $id = base64_decode($req->id);
      $blogDetails = $this->examPageBlogModel->find($id);
      return view('admin.pages.website_management.exam_page.view_blog')
                ->withBlogDetails($blogDetails);
    }

    /**
     * Blog display order update method.
     *
     * @param $req
     *
     * @return json
     */
    public function update_blog_order(Request $req) 
    {
        if($req->post()){
          if($req->blog){
              $data = $this->examPageBlogModel->whereIn('id',$req->blog)->select('display_order')->orderBy('display_order','ASC')->get();
              foreach ($req->blog as $key => $item) {
                  $update = $this->examPageBlogModel->where('id', $item)->update(['display_order' => $data[$key]->display_order]);
              }  
          }
          $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);   
          return response()->json($response);
        }
    }

    /**
     * Get exam popular list method.
     *
     * @param $req
     *
     * @return json
     */
    public function getPopular(Request $req) 
    {
        $examPageDetails = $this->model->where(['id'=>$req->exam_page_id])->first();
        $category_list = $this->examPagePopularCoachingCategoryModel->where(['exam_page_id'=>$examPageDetails->id])->orderBy('cat_name', 'ASC')->get();
        $html = '';
        $infohtml = '';
        if(count($category_list)>0){
            foreach ($category_list as $key => $list) {
                $html .= '<li class="'.(($key == 0) ? 'resp-tab-active popular_cat': '').' popular_category_li" data-id="'.base64_encode($list->id).'"  data-name="'.$list->cat_name.'">
                            <span>'.$list->cat_name.'</span> 
                            <a class="action-btn popular_cat_edit" href="javascript:void(0)"><img src="'.asset('admin/images/pen.svg').'" alt=""></a> 
                            <a href="javascript:void(0)" class="popular_cat_remove"><img src="'.asset('admin/images/bin.svg').'"  alt=""></a>
                          </li>';
            }
            $subcategories = $this->examPagePopularCoachingSubcategoryModel->where('exam_page_popular_coaching_category_id', $category_list[0]->id)->orderBy('display_order','ASC')->get();
            if($subcategories){
              foreach ($subcategories as $key1 => $value) {
                $infohtml .= '<li data-id="'. $value->display_order .'"  id="popular-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list">
                                  <span>'.$value->sub_cat_name.'</span>
                                  <span style="text-align: right;"><a href="'.$value->target_url.'" target="_blank" style="color: #ff7149;"><i class="fa fa-external-link"></i></a></span>
                                </div>                    
                                <a class="action-btn remove_sub_category" href="javascript:void(0)" data-id="'.base64_encode($value->id).'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
              }
              
            }
        } else {
            $html .= '<li>
                        <span>No category found...</span>
                    </li>';
        }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html, 'infohtml'=>$infohtml);   
        return response()->json($response);
    }

    /**
     * Popular category save method.
     *
     * @param $req
     *
     * @return json
     */
    public function popular_category_save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'category_name' => 'required',
                'exam_page_id' => 'required',
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              if(!$req->popular_edit_id){
                $examPageDetails = $this->model->where('id', $req->exam_page_id)->first();
                if($examPageDetails){
                   $insert_arr = [
                      'exam_page_id' => $examPageDetails->id,
                      'cat_name' => $req->category_name
                  ];
                  $insert = $this->examPagePopularCoachingCategoryModel->create($insert_arr);
                  $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
                }
              } else {
                $insert_arr = [
                    'cat_name' => $req->category_name
                ];
                $update = $this->examPagePopularCoachingCategoryModel->where('id',base64_decode($req->popular_edit_id))->update($insert_arr);
                $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
              }
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Delete popular category method.
     *
     * @param $req
     *
     * @return json
     */
    public function popular_category_remove(Request $req) 
    {
        if($req->post()){
            $info = $this->examPagePopularCoachingSubcategoryModel->where(['exam_page_popular_coaching_category_id'=>base64_decode($req->id)])->first();
            if($info){
              $response = array('status'=>201, 'message'=>'Sub category exist in this category, so cannot delete', 'result'=>[]);
            } else {
              $delete = $this->examPagePopularCoachingCategoryModel->where('id', base64_decode($req->id))->delete();
              $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            }
            
            return response()->json($response);           
        }        
    }

    /**
     * Get popular sub category list method.
     *
     * @param $req
     *
     * @return json
     */
    public function get_popular_sub_cat(Request $req) 
    {
        $html = '';
        $subcategories = $this->examPagePopularCoachingSubcategoryModel->where('exam_page_popular_coaching_category_id', base64_decode($req->cat_id))->orderBy('display_order','ASC')->get();
            if($subcategories){
              foreach ($subcategories as $key1 => $value) {
                $html = $html .= '<li data-id="'. $value->display_order .'"  id="popular-'.$value->id.'">
                          <div class="list-content">
                                <span class="s-no">'.($key1+1).'.</span>
                                <div class="list">
                                  <span>'.$value->sub_cat_name.'</span>
                                  <span style="text-align: right;"><a href="'.$value->target_url.'" target="_blank" style="color: #ff7149;"><i class="fa fa-external-link"></i></a></span>
                                </div>                    
                                <a class="action-btn remove_sub_category" href="javascript:void(0)" data-id="'.base64_encode($value->id).'"><img src="'.asset('admin/images/bin.svg').'" alt=""></a>
                              </div>
                        </li>';
              }
              
            }
        $response = array('status'=>200, 'message'=>'Sucess', 'result'=>$html);   
        return response()->json($response);
    }

    /**
     * Save popular sub category method.
     *
     * @param $req
     *
     * @return json
     */
    public function popular_sub_category_save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'category_id' => 'required',
                'sub_category_name' => 'required',
                'sub_category_url' => 'required',
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              $total_data = $this->examPagePopularCoachingSubcategoryModel->orderBy('display_order','DESC')->first();
              $insert_arr = [
                  'exam_page_popular_coaching_category_id' => base64_decode($req->category_id),
                  'sub_cat_name' => $req->sub_category_name,
                  'target_url' => $req->sub_category_url,
                  'display_order' => isset($total_data) ? $total_data->display_order+1 : 1
              ];
              $insert = $this->examPagePopularCoachingSubcategoryModel->create($insert_arr);
              $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            }            
            return response()->json($response);           
        }        
    }

    /**
     * Delete popular category method.
     *
     * @param $req
     *
     * @return json
     */
    public function popular_sub_category_remove(Request $req) 
    {
        if($req->post()){
            $delete = $this->examPagePopularCoachingSubcategoryModel->where('id', base64_decode($req->id))->delete();
            $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            return response()->json($response);           
        }        
    }

    /**
     * Popular sub category display order update method.
     *
     * @param $req
     *
     * @return json
     */
    public function update_popular_sub_category_order(Request $req) 
    {
        if($req->post()){
          if($req->popular){
              $data = $this->examPagePopularCoachingSubcategoryModel->whereIn('id',$req->popular)->select('display_order')->orderBy('display_order','ASC')->get();
              foreach ($req->popular as $key => $item) {
                  $update = $this->examPagePopularCoachingSubcategoryModel->where('id', $item)->update(['display_order' => $data[$key]->display_order]);
              }  
          }
          $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);   
          return response()->json($response);
        }
    }

    /**
     * Save seo method.
     *
     * @param $req
     *
     * @return json
     */
    public function seo_save(Request $req) 
    {
        if($req->post()){
            $validator = Validator::make($req->all(), [
                'seo_title' => 'required',
                'seo_keyword' => 'required',
                'seo_desc' => 'required',
                'exam_page_id' => 'required'
            ]);
            if($validator->fails()){
                $response = array('status'=>201, 'message'=>$validator->errors()->first(), 'result'=>[]);
            } else { 
              $insert_arr = [
                   'seo_title' => $req->seo_title,
                   'seo_keyword' => $req->seo_keyword,
                   'seo_desc' => $req->seo_desc
              ];
              $update = $this->model->where('id',$req->exam_page_id)->update($insert_arr);
              $response = array('status'=>200, 'message'=>'Sucess', 'result'=>[]);
            }            
            return response()->json($response);           
        }        
    }
}
