<?php

namespace App\Http\Controllers\Website;

use Carbon\Carbon;
use App\Models\Cms;
use App\Models\Job;
use App\Models\User;
use App\Models\Skill;
use AmrShawky\Currency;
use App\Models\Company;
use App\Models\JobRole;
use App\Models\Setting;
use App\Models\Candidate;
use App\Models\Education;
use App\Models\CmsContent;
use App\Models\Experience;
use App\Models\Profession;

use App\Models\JobCategory;
use Illuminate\Support\Str;
use App\Http\Traits\Jobable;
use App\Models\IndustryType;
use Illuminate\Http\Request;
use App\Models\ManualPayment;
use App\Models\PaymentSetting;
use App\Models\CandidateResume;
use Modules\Blog\Entities\Post;
use Modules\Plan\Entities\Plan;
use App\Models\OrganizationType;
use App\Models\CandidateLanguage;
use App\Http\Traits\Candidateable;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
// use Modules\Faq\Entities\FaqCategory;
use Modules\Blog\Entities\PostComment;
use Modules\Location\Entities\Country;
use Modules\Blog\Entities\PostCategory;
use Modules\Language\Entities\Language;
use App\Http\Traits\HasCountryBasedJobs;
use App\Models\Address;
use App\Traits\ResetCvViewsHistoryTrait;
use Illuminate\Support\Facades\Validator;
use App\Services\Website\IndexPageService;
use Stevebauman\Location\Facades\Location;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Support\Facades\Notification;
use Modules\Testimonial\Entities\Testimonial;
use App\Services\Midtrans\CreateSnapTokenService;
use Modules\Currency\Entities\Currency as CurrencyModel;
use App\Notifications\Website\Candidate\ApplyJobNotification;
use App\Notifications\Website\Candidate\BookmarkJobNotification;
use App\Models\Countries;
use App\Models\Universities;
use App\Models\Course;
use App\Models\CourseCategory;
use App\Models\CourseLevel;
use Modules\Faq\Entities\Faq;
use App\Models\Contact;
use App\Models\Lead;
use App\Models\Category;
use App\Models\University;
use Illuminate\Support\Facades\Hash;
use App\Models\Page;
use App\Models\Review;
use App\Models\Tag;
use App\Models\PageComment;

use App\Notifications\CompanyCreatedNotification;
use App\Notifications\CandidateCreateNotification;
use App\Notifications\Admin\NewUserRegisteredNotification;
use App\Notifications\CompanyCreateApprovalPendingNotification;
use App\Notifications\CandidateCreateApprovalPendingNotification;


class WebsiteController extends Controller
{
    use Jobable, Candidateable, ResetCvViewsHistoryTrait, HasCountryBasedJobs;

    public function dashboard()
    {
        if (auth('user')->check() && auth('user')->user()->role == 'candidate') {
            return redirect()->route('candidate.dashboard');
        } elseif (auth('user')->check() && auth('user')->user()->role == 'company') {
            storePlanInformation();
            return redirect()->route('company.dashboard');
        }

        return redirect('login');
    }

    public function notificationRead()
    {
        foreach (auth()->user()->unreadNotifications as $notification) {
            $notification->markAsRead();
        }

        return response()->json(true);
    }

    public function index()
    {
        $data = (new IndexPageService())->execute();
        $websiteSetting= !empty($data['websiteSetting'])?$data['websiteSetting']:[];
// dd($data);
        return view('website.pages.index', compact(['data','websiteSetting']));
    }

    public function termsCondition()
    {
        $termscondition = Cms::select('terms_page')->first();
        $cms_content = CmsContent::query();

        $terms_page = null;

        //check session current language
        $current_language = currentLanguage() ? currentLanguage() : '';
        if ($current_language) {

            $exist_cms_content =  $cms_content->where('translation_code', $current_language->code)->where('page_slug', 'terms_condition_page')->first();

            if ($exist_cms_content) {
                $terms_page = $exist_cms_content->text;
            }
        } else { //else push default one

            $exist_cms_content_en =  $cms_content->where('translation_code', 'en')->where('page_slug', 'terms_condition_page')->first();

            if ($exist_cms_content_en) {

                $terms_page = $exist_cms_content_en->text;
            } else {

                $terms_page = $termscondition->terms_page;
            }
        }

        return view('website.pages.terms-condition', compact('termscondition', 'terms_page'));
    }

    public function privacyPolicy()
    {
        $privacy_page_default = Cms::select('privary_page')->first();
        $cms_content = CmsContent::query();

        $privacy_page = null;

        //check session current language
        $current_language = currentLanguage() ? currentLanguage() : '';

        //if has session current language
        if ($current_language) {

            $exist_cms_content =  $cms_content->where('translation_code', $current_language->code)->where('page_slug', 'privacy_page')->first();

            if ($exist_cms_content) {
                $privacy_page = $exist_cms_content->text;
            }
        } else { //else push default one

            $exist_cms_content_en =  $cms_content->where('translation_code', 'en')->where('page_slug', 'privacy_page')->first();

            if ($exist_cms_content_en) {

                $privacy_page = $exist_cms_content_en->text;
            } else {

                $privacy_page = $privacy_page_default->privary_page;
            }
        }

        return view('website.pages.privacy-policy', compact('privacy_page_default', 'privacy_page'));
    }

    public function refundPolicy()
    {
        $page_name = "refund_page";
        $page_default = Cms::select($page_name)->first();
        $cms_content = CmsContent::query();

        $page = null;

        //check session current language
        $current_language = currentLanguage() ? currentLanguage() : '';

        //if has session current language
        if ($current_language) {

            $exist_cms_content =  $cms_content->where('translation_code', $current_language->code)->where('page_slug', $page_name)->first();

            if ($exist_cms_content) {
                $page = $exist_cms_content->text;
            }
        } else { //else push default one

            $exist_cms_content_en =  $cms_content->where('translation_code', 'en')->where('page_slug', $page_name)->first();

            if ($exist_cms_content_en) {

                $page = $exist_cms_content_en->text;
            } else {

                $page = $page_default->$page_name;
            }
        }

        return view('website.pages.refund-policy', compact('page_default', 'page'));
    }
    public function jobs(Request $request)
    {
        $data = $this->getJobs($request);
        $data['indeed_jobs'] = $this->getIndeedJobs($request);
        $data['careerjet_jobs'] = $this->getCareerjetJobs($request);

        if (auth('user')->check() && auth('user')->user()->role == 'candidate') {
            $data['resumes'] = auth('user')->user()->candidate->resumes;
        } else {
            $data['resumes'] = [];
        }

        return view('website.pages.jobs', $data);
    }

    public function jobDetails(Job $job)
    {
        if ($job->status == 'pending') {
            if (!auth('admin')->check()) {
                abort_if(!auth('user')->check(), 404);
                abort_if(auth('user')->user()->role != 'company', 404);
                abort_if(auth('user')->user()->company->id != $job->company_id, 404);
            }
        }

        $data = $this->getJobDetails($job);

        return view('website.pages.job-details', $data);
    }

    public function candidates(Request $request)
    {
        abort_if(auth('user')->check() && auth('user')->user()->role == 'candidate', 404);

        $data['professions'] = Profession::all();
        $data['candidates'] = $this->getCandidates($request);
        $data['countries'] = Country::all();
        $data['experiences'] = Experience::all();
        $data['educations'] = Education::all();
        $data['skills'] = Skill::all();
        $data['candidate_languages'] = CandidateLanguage::all(['id', 'name']);

        // reset candidate cv views history
        $this->reset();

        return view('website.pages.candidates', $data);
    }

    public function candidateDetails(Request $request, $username)
    {
        $candidate = User::where('username', $username)
            ->with('candidate', 'contactInfo', 'socialInfo')
            ->firstOrFail();

        abort_if(auth('user')->check() && $candidate->id != auth('user')->id(), 404);

        if ($request->ajax) {
            return response()->json($candidate);
        }

        return view('website.pages.candidate-details', compact('candidate'));
    }

    public function candidateProfileDetails(Request $request)
    {
        $user = auth('user')->user();

        if ($user->role != 'company') {
            return response()->json([
                'message' => __('you_are_not_authorized_to_perform_this_action'),
                'success' => false
            ]);
        } else {
            $user_plan = $user->company->userPlan;
        }
        if (!$user_plan) {
            return response()->json([
                'message' => __('you_dont_have_a_chosen_plan_please_choose_a_plan_to_continue'),
                'success' => false
            ]);
        }

        if (isset($user_plan) && $user_plan->candidate_cv_view_limitation == 'limited' && $user_plan->candidate_cv_view_limit <= 0) {
            return response()->json([
                'message' => __('you_have_reached_your_limit_for_viewing_candidate_cv_please_upgrade_your_plan'),
                'success' => false,
                'redirect_url' => route('website.plan'),
            ]);
        }

        $candidate = User::where('username', $request->username)
            ->with(['contactInfo', 'socialInfo', 'candidate' => function ($query) {
                $query->with('experience', 'education', 'experiences', 'educations', 'profession', 'languages:id,name', 'skills')
                    ->withCount(['bookmarkCandidates as bookmarked' => function ($q) {
                        $q->where('company_id',  auth('user')->user()->company->id);
                    }])
                    ->withCount(['already_views as already_view' => function ($q) {
                        $q->where('company_id', auth('user')->user()->company->id);
                    }]);
            }])
            ->firstOrFail();

        $candidate->candidate->birth_date = Carbon::parse($candidate->candidate->birth_date)->format('d F, Y');

        if ($user_plan->candidate_cv_view_limitation == 'limited' && $request->count_view) {

            $company = auth()->user()->company;
            $cv_views = $company->cv_views; // get auth company all cv views
            $cv_view_exist = $cv_views->where('candidate_id', $candidate->candidate->id)->first(); // get specific view

            if (!$cv_view_exist) { // check view isn't exist
                isset($user_plan) ? $user_plan->decrement('candidate_cv_view_limit') : ''; // point reduce
                // and create view count item
                $company->cv_views()->create([
                    'candidate_id' => $candidate->candidate->id,
                    'view_date' => Carbon::parse(Carbon::now()),
                ]);
            }
        }

        $cv_limit_message = $user_plan->candidate_cv_view_limitation == 'limited' ? 'You have ' . $user_plan->candidate_cv_view_limit . ' cv views remaining.' : null;

        $languages = $candidate->candidate->languages()->pluck('name')->toArray();
        $candidate_languages = $languages ? implode(", ", $languages) : '';

        $skills = $candidate->candidate->skills->pluck('name');
        $candidate_skills = $skills ? implode(", ",  json_decode(json_encode($skills), true)) : '';

        return response()->json([
            'success' => true,
            'data' => $candidate,
            'skills' => $candidate_skills ?? '',
            'languages' => $candidate_languages ?? '',
            'profile_view_limit' => $cv_limit_message,
        ]);
    }

    public function candidateApplicationProfileDetails(Request $request)
    {
        $candidate = User::where('username', $request->username)
            ->with(['contactInfo', 'socialInfo', 'candidate' => function ($query) {
                $query->with('experiences', 'educations', 'experience', 'education', 'profession', 'languages:id,name', 'skills');
            }])
            ->firstOrFail();

        $candidate->candidate->birth_date = Carbon::parse($candidate->candidate->birth_date)->format('d F, Y');

        $languages = $candidate->candidate->languages()->pluck('name')->toArray();
        $candidate_languages = $languages ? implode(", ", $languages) : '';

        $skills = $candidate->candidate->skills->pluck('name');
        $candidate_skills = $skills ? implode(", ", json_decode(json_encode($skills))) : '';

        return response()->json([
            'success' => true,
            'data' => $candidate,
            'skills' => $candidate_skills,
            'languages' => $candidate_languages,
        ]);
    }

    public function candidateDownloadCv(CandidateResume $resume)
    {
        $filePath = $resume->file;

        $filename = time() . '.pdf';

        $headers = ['Content-Type: application/pdf',  'filename' => $filename,];
        $fileName = rand() . '-resume' . '.pdf';

        return response()->download($filePath, $fileName, $headers);
    }

    public function employees(Request $request)
    {
        abort_if(auth('user')->check() && auth('user')->user()->role == 'company', 404);

        $query = Company::with('user', 'user.contactInfo')->withCount([
            'jobs as activejobs' => function ($q) {
                $q->where('status', 'active');

                $selected_country = session()->get('selected_country');
                if ($selected_country && $selected_country != null && $selected_country != 'all') {
                    $country = selected_country()->name;
                    $q->where('country', 'LIKE', "%$country%");
                } else {

                    $setting = Setting::first();
                    if ($setting->app_country_type == 'single_base') {
                        if ($setting->app_country) {

                            $country = Country::where('id', $setting->app_country)->first();
                            if ($country) {
                                $q->where('country', 'LIKE', "%$country->name%");
                            }
                        }
                    }
                }
            }
        ])->withCount([
            'bookmarkCandidateCompany as candidatemarked' => function ($q) {
                $q->where('user_id', auth()->id());
            }
        ])
            ->withCasts(['candidatemarked' => 'boolean'])->active();

        // Keyword search
        if ($request->has('keyword') && $request->keyword != null) {
            $keyword = $request->keyword;
            $query->whereHas('user', function ($q) use ($keyword) {
                $q->where('name', 'LIKE', "%$keyword%");
            });
        }

        // location search
        if ($request->has('lat') && $request->has('long') && $request->lat != null && $request->long != null) {
            $ids = $this->company_location_filter($request->lat, $request->long);
            $query->whereIn('id', $ids)->orWhere('country', $request->location ? $request->location : '');
        }

        // industry_type
        if ($request->has('industry_type') && $request->industry_type !== null) {
            $industry_type_id = IndustryType::where('name', $request->industry_type)->value('id');
            $query->where('industry_type_id', $industry_type_id);
        }

        // organization_type
        if ($request->has('organization_type') && $request->organization_type !== null) {

            $organization_type = $request->organization_type;

            $query->whereHas('organization', function ($q) use ($organization_type) {
                $q->where('name', $organization_type);
            });
        }
        // sortBy search
        if ($request->has('sortBy') && $request->sortBy) {
            if ($request->sortBy == 'latest') {
                $query->latest();
            } else {
                $query->oldest();
            }
        } else {
            $query->latest();
        }

        $companies = $query;

        // perpage filter
        if ($request->has('perpage') && $request->perpage != null) {
            switch ($request->perpage) {
                case '12':
                    $companies = $query->latest('activejobs')->paginate(12);
                    break;
                case '18':
                    $companies = $query->latest('activejobs')->paginate(18);
                    break;
                case '30':
                    $companies = $query->latest('activejobs')->paginate(30);
                    break;
            }
        } else {
            $companies = $query->latest('activejobs')->paginate(12);
        }

        $industry_types = IndustryType::all();
        $organization_type = OrganizationType::all();

        // return $companies;

        return view('website.pages.employees', compact('companies', 'industry_types', 'organization_type'));
    }

    public function employersDetails(User $user)
    {
        $companyDetails =  Company::with(
            'organization:id,name',
            'industry',
            'team_size:id,name',
        )->where('user_id', $user->id)->withCount([
            'jobs as activejobs' => function ($q) {
                $q->where('status', true);
                $q->where('deadline', '>=', Carbon::now()->toDateString());
                $selected_country = session()->get('selected_country');
                if ($selected_country && $selected_country != null && $selected_country != 'all') {
                    $country = selected_country()->name;
                    $q->where('country', 'LIKE', "%$country%");
                } else {

                    $setting = Setting::first();
                    if ($setting->app_country_type == 'single_base') {
                        if ($setting->app_country) {

                            $country = Country::where('id', $setting->app_country)->first();
                            if ($country) {
                                $q->where('country', 'LIKE', "%$country->name%");
                            }
                        }
                    }
                }
            }
        ])
            ->withCount([
                'bookmarkCandidateCompany as candidatemarked' => function ($q) {
                    $q->where('user_id', auth()->id());
                }
            ])
            ->withCasts(['candidatemarked' => 'boolean'])
            ->first();

        // open_jobs Jobs With Single && Multiple Country Base
        $open_jobs_query = Job::withoutEdited()->with('company');

        $setting = Setting::first();
        if ($setting->app_country_type == 'single_base') {
            if ($setting->app_country) {

                $country = Country::where('id', $setting->app_country)->first();
                if ($country) {
                    $open_jobs_query->where('country', 'LIKE', "%$country->name%");
                }
            }
        } else {
            $selected_country = session()->get('selected_country');

            if ($selected_country && $selected_country != null) {
                $country = selected_country()->name;
                $open_jobs_query->where('country', 'LIKE', "%$country%");
            }
        }
        $open_jobs = $open_jobs_query->companyJobs($companyDetails->id)->openPosition()->latest()->get();

        return view('website.pages.employe-details', compact('user', 'companyDetails', 'open_jobs'));
    }

    public function about()
    {
        $testimonials = Testimonial::all();
        $companies = Company::count();
        $candidates = Candidate::count();
        $about = Cms::first();

        return view('website.pages.about', compact('testimonials',  'companies', 'candidates', 'about'));
    }

    public function categoryWisePosts(PostCategory $category)
    {
        $key = request()->search;
        $key = request()->category;

        $posts = Post::query()->published();

        if ($key) {
            $posts->where('title', 'Like', '%' . $key . '%');
        }

        $posts = $category->posts()->latest()->paginate(15);

        $recent_posts = Post::published()->latest()->take(5)->get();
        $categories = PostCategory::latest()->get();
        return view('website.pages.posts', compact('posts', 'categories', 'recent_posts', 'key'));
    }

    public function pricing()
    {
        abort_if(auth('user')->check() && auth('user')->user()->role == 'candidate', 404);
        $plans = Plan::active()->get();
        return view('website.pages.pricing', compact('plans'));
    }

    public function planDetails($label)
    {
        abort_if(auth('user')->check() && auth('user')->user()->role == 'candidate', 404);

        // session data storing
        $plan = Plan::where('label', $label)->firstOrFail();
        session(['stripe_amount' => currencyConversion($plan->price) * 100]);
        session(['razor_amount' => currencyConversion($plan->price, null, 'INR', 1) * 100]);
        session(['ssl_amount' => currencyConversion($plan->price, null, 'BDT', 1)]);
        session(['plan' => $plan]);
        session(['job_payment_type' => 'package_job']);
        session()->forget('job_request');

        $payment_setting = PaymentSetting::first();
        $manual_payments = ManualPayment::whereStatus(1)->get();

        // midtrans snap token
        if (config('zakirsoft.midtrans_active') && config('zakirsoft.midtrans_merchat_id') && config('zakirsoft.midtrans_client_key') && config('zakirsoft.midtrans_server_key')) {
            $usd = $plan->price;
            $amount = (int) Currency::convert()
                ->from(config('zakirsoft.currency'))
                ->to('IDR')
                ->amount($usd)
                ->round(2)
                ->get();

            $order['order_no'] = uniqid();
            $order['total_price'] = $amount;

            $midtrans = new CreateSnapTokenService($order);
            $snapToken = $midtrans->getSnapToken();

            session(['midtrans_details' => [
                'order_no' => $order['order_no'],
                'total_price' => $order['total_price'],
                'snap_token' => $snapToken,
                'plan_id' => $plan->id,
            ]]);
        }


        return view('website.pages.plan-details', [
            'plan' => $plan,
            'payment_setting' => $payment_setting,
            'mid_token' => $snapToken ?? null,
            'manual_payments' => $manual_payments,
        ]);
    }

    public function contact(Request $request)
    {
        // if ($request->post()) {
        //     $validatedData = $request->validate([
        //         'name' => 'required|string|max:255',
        //         'email' => 'required|email|max:255',
        //         'phone' => 'required|min:10',
        //         'description' => 'required|string',
        //     ]);
        //     // Save the data to the database
        //     $contact = Lead::create($validatedData);

        //         // Redirect back with a success message
        //         flashSuccess(__('Your message has been sent! '));
        //         return back()->with('success', 'Your message has been sent!');

        // }
        return view('website.pages.contact');
    }

    // public function contactDetails(Request $request)
    // {
    //     $request->validate([
    //         'name' => 'required| string| max:50',
    //         'email' => 'required| email| max:255',
    //         'phone' => 'required | min:9| max:255',
    //       ]);

    //     $data['name'] = $request->name;
    //     $data['email'] = $request->email;
    //     $data['phone'] = $request->phone;
    //     $data['description'] = $request->description;
    //     $data['url'] = $request->url;
    //     $data['source'] = $request->source;

    //     $contact = Lead::create($data);

    //     if (!empty($contact)) {
    //         return ['status' => 1, 'msg' => 'We Will Contact You Soon'];
    //     }
    
    //     return ['status' => 0, 'msg' => 'Something Went Wrong'];

    // }

    public function faq(Request $request)
    {
        $faq_categories = Category::with(['faqs' => function ($q) {
            $q->where('code', currentLangCode());
        }])->get();
        $condition = [];
        if ($request->isMethod('get')) {
            if ($request->input('searchData')) {
                $condition[] = ['question', 'like', '%' . $request->input('searchData') . '%'];
            }
        }
        $faqs = Faq::with('university')->where($condition)->orderBy('id', 'desc')->take(8)->get();
        return view('website.pages.faq', compact('faq_categories', 'faqs'));
    }

    public function comingSoon()
    {
        return view('website.pages.comingsoon');
    }

    public function toggleBookmarkJob(Job $job)
    {
        $check = $job->bookmarkJobs()->toggle(auth('user')->user()->candidate);

        if ($check['attached'] == [1]) {

            $user = auth('user')->user();
            // make notification to company candidate bookmark job
            Notification::send($job->company->user, new BookmarkJobNotification($user, $job));
            // make notification to candidate for notify
            if (auth()->user()->recent_activities_alert) {
                Notification::send(auth('user')->user(), new BookmarkJobNotification($user, $job));
            }
        }


        $check['attached'] == [1] ? $message = __('job_added_to_favorite_list') : $message = __('job_removed_from_favorite_list');

        flashSuccess($message);
        return back();
    }

    public function toggleApplyJob(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'resume_id' => 'required',
            'cover_letter' => 'required',
        ], [
            'resume_id.required' => 'Please select resume',
            'cover_letter.required' => 'Please enter cover letter',
        ]);

        if ($validator->fails()) {
            flashError($validator->errors()->first());
            return back();
        }

        if (auth('user')->user()->candidate->profile_complete != 0) {
            flashError(__('complete_your_profile_before_applying_to_jobs_add_your_information_resume_and_profile_picture_for_a_better_chance_of_getting_hired'));
            return redirect()->route('candidate.dashboard');
        }

        $candidate = auth('user')->user()->candidate;
        $job = Job::find($request->id);

        DB::table('applied_jobs')->insert([
            'candidate_id' => $candidate->id,
            'job_id' => $job->id,
            'cover_letter' => $request->cover_letter,
            'candidate_resume_id' => $request->resume_id,
            'application_group_id' => $job->company->applicationGroups->where('is_deleteable', false)->first()->id ?? 1,
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        // make notification to candidate and company for notify
        $job->company->user->notify(new ApplyJobNotification(auth('user')->user(), $job->company->user));

        if (auth('user')->user()->recent_activities_alert) {
            auth('user')->user()->notify(new ApplyJobNotification(auth('user')->user(), $job->company->user));
        }

        flashSuccess(__('job_applied_successfully'));
        return back();
    }

    public function register($role)
    {
        return view('auth.register', compact('role'));
    }

    public function posts(Request $request)
    {
        $key = request()->search;
        $posts = Post::query()->published()->withCount('comments');

        if ($key) {
            $posts->where('title', 'Like', '%' . $key . '%');
        }

        if ($request->category) {
            $category_ids = PostCategory::whereIn('slug', $request->category)->get()->pluck('id');
            $posts = $posts->whereIn('category_id', $category_ids)->latest()->paginate(10)->withQueryString();
        } else {
            $posts = $posts->latest()->paginate(10)->withQueryString();
        }

        $recent_posts = Post::published()->withCount('comments')->latest()->take(5)->get();
        $categories = PostCategory::latest()->get();

        return view('website.pages.posts', compact('posts', 'categories', 'recent_posts'));
    }

    public function post($slug)
    {
        $post = Post::published()->whereSlug($slug)
            ->with([
                'author:id,name,name',
                'comments.replies.user:id,name,image'
            ])
            ->first();
        if (!$post) {
            abort(404);
        }

        return view('website.pages.post', compact('post'));
    }

    public function comment(Post $post, Request $request)
    {

        $request->validate([
            'body' => 'required|max:2500|min:2'
        ]);

        $comment = new PostComment();
        $comment->author_id = auth()->user()->id;
        $comment->post_id = $post->id;
        if ($request->has('parent_id')) {
            $comment->parent_id = $request->parent_id;
            $redirect = "#replies-" . $request->parent_id;
        } else {
            $redirect = "#comments";
        }
        $comment->body = $request->body;
        $comment->save();

        return redirect(url()->previous() . $redirect);
    }

    public function markReadSingleNotification(Request $request)
    {
        auth()->user()->unreadNotifications->where('id', $request->id)->markAsRead();

        return true;
    }

    public function setSession(Request $request)
    {
        $request->session()->put('location', $request->input());
        return response()->json(true);
    }

    public function setCurrentLocation($request)
    {
        // Current Visitor Location Track && Set Country IF App Is Multi Country Base
        $app_country = setting('app_country_type');

        if ($app_country == 'multiple_base') {

            $ip = request()->ip();
            // $ip = '103.102.27.0'; // Bangladesh
            // $ip = '105.179.161.212'; // Mauritius
            // $ip = '110.33.122.75'; // AUD
            // $ip = '5.132.255.255'; // SA
            // $ip = '107.29.65.61'; // United States"
            // $ip = '46.39.160.0'; // Czech Republic
            // $ip = "94.112.58.11"; // Czechia

            if ($ip) {
                $current_user_data = Location::get($ip);
                if ($current_user_data) {
                    $user_country = $current_user_data->countryName;
                    if ($user_country) {
                        $this->setLangAndCurrency($user_country);
                        $database_country = Country::where('name', $user_country)->where('status', 1)->first();
                        if ($database_country) {
                            $selected_country = session()->get('selected_country');
                            if (!$selected_country) {
                                session()->put('selected_country', $database_country->id);
                                return true;
                            }
                        }
                    }
                }
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * Process for set currency & language
     */
    public function setLangAndCurrency($name)
    {
        // this process for get language code/sort name  and currency sortname
        $get_lang_wise_sort_name = json_decode(file_get_contents(base_path('public/json/country_currency_language.json')), true);

        $country_name = Str::slug($name);
        if ($get_lang_wise_sort_name) { // loop json file data

            for ($i = 0; $i < count($get_lang_wise_sort_name); $i++) {

                $json_country_name = Str::slug($get_lang_wise_sort_name[$i]['name']);

                if ($country_name == $json_country_name) { // check country are same

                    $cn_code = $get_lang_wise_sort_name[$i]['currency']['code'];
                    $ln_code = $get_lang_wise_sort_name[$i]['language']['code'];

                    // Currency setup
                    $set_currency = CurrencyModel::where('code', Str::upper($cn_code))->first();
                    if ($set_currency) {
                        session(['current_currency' => $set_currency]);
                        currencyRateStore();
                    }
                    // // Currency setup
                    $set_language = Language::where('code', Str::lower($ln_code))->first();
                    if ($set_language) {
                        session(['current_lang' => $set_language]);
                        // session()->put('set_lang', $lang);
                        app()->setLocale($ln_code);
                    }
                    return true;
                }
            }
        } else {
            return false;
        }
    }

    public function setSelectedCountry(Request $request)
    {
        session()->put('selected_country', $request->country);

        return back();
    }

    public function removeSelectedCountry()
    {
        session()->forget('selected_country');
        return redirect()->back();
    }

    public function company_location_filter($latitude, $longitude)
    {
        $distance = 50;

        $haversine = "(
                    6371 * acos(
                        cos(radians(" . $latitude . "))
                        * cos(radians(`lat`))
                        * cos(radians(`long`) - radians(" . $longitude . "))
                        + sin(radians(" . $latitude . ")) * sin(radians(`lat`))
                    )
                )";

        $data = Company::select('id')->selectRaw("$haversine AS distance")
            ->having("distance", "<=", $distance)->get();

        $ids = [];

        foreach ($data as $id) {
            array_push($ids, $id->id);
        }

        return $ids;
    }

    public function jobAutocomplete(Request $request)
    {
        $jobs = Job::select("title as value", "id")
            ->where('title', 'LIKE', '%' . $request->get('search') . '%')
            ->active()
            ->withoutEdited()
            ->latest()
            ->get()
            ->take(15);

        if ($jobs && count($jobs)) {
            $data = '<ul class="dropdown-menu show">';
            foreach ($jobs as $job) {
                $data .= '<li class="dropdown-item"><a href="' . route('website.job', ['keyword' => $job->value]) . '">' . $job->value . '</a></li>';
            }
            $data .= '</ul>';
        } else {
            $data = '<ul class="dropdown-menu show"><li class="dropdown-item">No data found</li></ul>';
        }

        return response()->json($data);
    }

    /**
     * Careerjet jobs list
     *
     * @return Renderable
     */
    public function careerjetJobs(Request $request)
    {
        if (!config('zakirsoft.careerjet_active') || !config('zakirsoft.careerjet_id')) {
            abort(404);
        }

        $careerjet_jobs = $this->getCareerjetJobs($request, 25);

        return view('website.pages.jobs.careerjet-jobs', compact('careerjet_jobs'));
    }

    /**
     * Indeed jobs list
     *
     * @return Renderable
     */
    public function indeedJobs(Request $request)
    {
        if (!config('zakirsoft.indeed_active') || !config('zakirsoft.indeed_id')) {
            abort(404);
        }

        $indeed_jobs = $this->getIndeedJobs($request, 25);

        return view('website.pages.jobs.indeed-jobs', compact('indeed_jobs'));
    }
    public function all_countries(Request $request)
    {

        dd('All Countries');
    }
    public function country(Request $request, $country)
    {
        return view('website.pages.company.country-details');

        dd($country);
    }
    // public function universities(Request $request,$university){
    //     dd($university); 
    // }
    // public function uk_universities(Request $request,$universityName,$name){
    //     dd($request);
    //     $university = Universities::where('url',$universityName)->with('countries')->first();
    //     $countries = Countries::where('id',1)->get();
    //     // dd($university);
    //     // dd(trim($university->courseWidget) );
    //     // print_r(json_decode(($university->courseWidget),true));die;
    //     return view('website.pages.company.universities',compact('university'));
    // }
    public function uk_universities_courses(Request $request)
    {

        return view('website.pages.company.universities-courses');
    }



    public function cw_universities($country=null ,Request $request)
    {
        $countryId = null;
        $condition=['status'=>1];
        if($request->input('searchUniversity')){
            $condition[] = ['name', 'LIKE', '%' . $request->searchUniversity . '%'];   
        }
        if($country !== null){
            $country = Countries::where('url', $country)->first();
            if(empty($country)){
                abort(404);
            }
            $countryId = $country->id;
        }
        if($request->input('country')){
            $countryId = $request->input('country');
            if($request->country !== 'university'){
                $condition[] = ['country_id', $countryId ];
            }
        }
        else{
            if(!empty($countryId)){
                $condition[] = ['country_id', $countryId ];
            }
        }
        // if($request->input('studyLevel') != ''){
        //     $condition[] = ['name', 'LIKE', '%' . $request->studyLevel . '%'];
        // }
        // if($request->input('fees') != ''){
        //     $condition[] = ['name', 'LIKE', '%' . $request->fees . '%'];
        // }
        // if($request->input('exams') != ''){
        //     $condition[] = ['name', 'LIKE', '%' . $request->exams . '%'];
        // }

        $universities = Universities::with(['countries'])->where($condition)->sorting()->with('countries')->orderBy('sorting','Desc')->paginate(15);
        if(empty($universities)) abort(404);
        $universities->country = Countries::where('url', $country)->first();
        // dd($universities);
        return view('website.pages.company.cw_universities', compact(['universities', 'countryId']));
      
    }

    public function cw_university_details($country, $university_url)
    {
        // $faq = Faq::all();
        // dd($faq);

        $university = Universities::where('url', $university_url)->with(['countries', 'faq','courses','cities','review'])
            ->whereHas('countries', function ($query) use ($country) {
                $query->where('url', $country);
            })
            ->first();
        // dd($university);
        if (empty($university)) abort(404);

        $id = $university->id;
        $category = CourseCategory::with('course')->whereHas('course', function ($query) use ($id) {
            $query->where('university_id', $id);
        })->get();
        $university->category = $category;

        // $co = Course::where(['course_categories_id'=>2,'durationUnit'=>'months'])->min('durationValue');
        // // $co = Course::select('durationValue','durationUnit')->where(['course_categories_id'=>2,'durationUnit'=>'years'])->max('durationValue');

        // dd($university);
        return view('website.pages.company.universities', compact('university'));

       
    }
    public function cw_courses($country, $university_url, Request $request)
    {
        $condition = [];
        if ($request->isMethod('get')) {
            // dd($request->all());
            if ($request->has('search')) {
                $condition[] = ['name', 'LIKE', '%' . $request->search . '%'];
            }
            if (!empty($request->category)) {
                $condition['course_categories_id'] = $request->input('category');
            }
            if (!empty($request->course_level)) {
                $condition['course_level_id'] = $request->input('course_level');
            }
        }
        // dd();
        $university = Universities::with('countries')->where('url', $university_url)->first();

        // \DB::enableQueryLog(); // Enable query log
        $university->courses = Course::with(['university', 'category'])->where($condition)
            ->whereHas('university', function ($query) use ($university_url) {
                $query->where(['url' => $university_url]);
            })
            ->paginate(9);
        // ->toSql();
        // dd($university->courses);
        //         dd($university_url .' => '.$country);
        $university->category = CourseCategory::all();
        $university->categoryLevel = CourseLevel::all();
        // $course = Course::where('university_id',$university->id)->with(['university.countries','university'])->first();
        // dd($uni);
        return view('website.pages.company.universities-courses', compact('university'));
        
        // code to fetch courses for the given university
    }
    public function cw_coursesFilter($country, $university_url, Request $request)
    {
        $condition = [];
        if (!empty($request)) {


            if ($request->input('search')) {
                $condition[] = ['name', 'LIKE', '%' . $request->search . '%'];
            }
            if ($request->input('courses')) {
                $condition[] = ['course_level', 'LIKE', '%' . $request->courses . '%'];
            }
            if ($request->input('category')) {
                $category_id = implode(',', $request->input('category'));
                $condition['course_categories_id'] = $category_id;
            }
            $courses = Course::with(['university', 'category'])
                ->where($condition)
                ->whereHas('university', function ($query) use ($university_url) {
                    $query->where(['url' => $university_url]);
                })

                ->get();

            // dd($courses);
            if (!empty($courses)) {
                return ['status' => 1, 'data' => $courses];
            }
        }
        return ['status' => 0, 'data' => 'invalid Request'];

        // $courses = Course::with(['university'])
        // ->whereHas('university', function ($query) use ($university_url) {
        //     $query->where(['url'=> $university_url]);
        // })->paginate(9);
       
    }

    public function cw_courses_details($country, $university_url, $course_url)
    {
        $courses = Course::with(['university', 'level', 'category'])->where('url', $course_url)
            ->whereHas('university', function ($query) use ($university_url) {
                $query->where(['url' => $university_url]);
            })
            ->first();
        if (empty($courses)) abort(404);

        $relatedCourses = Course::where('course_categories_id', $courses->course_categories_id)->where('id', '!=', $courses->id)->take(3)->get();
        // dd($relatedCourses);
        return view('website.pages.company.course-details', compact('courses', 'relatedCourses'));


        // code to fetch details for the given course
    }
    // public function stepperData(Request $request)
    // {
    //     if ($request->isMethod('post')) {

    //         // $oldUser = User::where('email', $request->input('email'))->first();
    //         // if(!($oldUser)){
    //         // $newUsername = Str::slug($request->input('name'));
    //         // $password='user@123';
    //         // $user = User::create([
    //         //     'name' => $request->input('name'),
    //         //     'email' => $request->input('email'),
    //         //     'username' => Str::slug($newUsername) . '_' . Str::random(5),
    //         //     'password' => Hash::make($password),
    //         //     'role' => 'candidate',
    //         // ]);
    //         // if (checkMailConfig()) {
    //         //     if ($user->role == "candidate") {
    //         //         $candidate_account_auto_activation_enabled = Setting::where("candidate_account_auto_activation", 1)->count();
    //         //         if ($candidate_account_auto_activation_enabled) {
    //         //             Notification::route('mail', $user->email)->notify(new CandidateCreateNotification($user, $password));
    //         //         } else {
    //         //             Notification::route('mail', $user->email)->notify(new CandidateCreateApprovalPendingNotification($user, $password));
    //         //         }
    //         //     } elseif ($user->role == "company") {
    //         //         $employer_auto_activation_enabled = Setting::where("employer_auto_activation", 1)->count();
    //         //         if ($employer_auto_activation_enabled) {
    //         //             Notification::route('mail', $user->email)->notify(new CompanyCreatedNotification($user, $password));
    //         //         } else {
    //         //             Notification::route("mail", $user->email)->notify(new CompanyCreateApprovalPendingNotification($user, $password));
    //         //         }
    //         //     }
    //         // }
    //         // // session(['isLoggedIn' => true]);
    //         // // Auth::guard('user')->login($user);
    //         //     return ['status' => 10, 'msg' => 'Lead Submit Successfully'];
    //         // }
    //         // else{
    //             $lead = new Lead;
    //             $lead->name = $request->input('name');
    //             $lead->email = $request->input('email');
    //             $lead->phone = $request->input('phone');
    //             $lead->country_id = $request->input('country');
    //             $lead->url =  $request->input('url');
    //             $lead->source =  $request->input('source');
    //             $questions = [];
    //             $questions['location'] = $request->input('location');
    //             $questions['level'] = $request->input('level');
    //             $questions['journey'] = $request->input('journey');
    //             $jsonData = json_encode($questions);
    //             $lead->description = $jsonData;
    //             $lead = $lead->save();
    //             // if(session(['isLoggedIn' => true])){
    //             //     Auth::guard('user')->login($oldUser);
    //             // }
    //             if($lead){
    //                 return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
    //             }
    //         // }
    //         return ['status' => 0, 'msg' => 'Data Not save in Lead Data'];
    //     }
    // }


    // public function popupData(Request $request)
    // {
    //     if ($request->isMethod('post')) {
    //         if(!empty($request->input('name'))){
    //             $name = $request->input('name');
    //         }
    //         else{
    //             $name = $request->input('name1');
    //         }
            
    //         // $oldUser = User::where('email', $request->input('email'))->first();
    //         // if(!($oldUser)){
    //         //     $newUsername = Str::slug($request->input('name'));
    //         //     $password='user@123';
    //         //     $user = User::create([
    //         //         'name' => $request->input('name'),
    //         //         'email' => $request->input('email'),
    //         //         'username' => Str::slug($newUsername) . '_' . Str::random(5),
    //         //         'password' => Hash::make($password),
    //         //         'role' => 'candidate',
    //         //     ]);
    //         //     if (checkMailConfig()) {
    //         //         if ($user->role == "candidate") {
    //         //             $candidate_account_auto_activation_enabled = Setting::where("candidate_account_auto_activation", 1)->count();
    //         //             if ($candidate_account_auto_activation_enabled) {
    //         //                 Notification::route('mail', $user->email)->notify(new CandidateCreateNotification($user, $password));
    //         //             } else {
    //         //                 Notification::route('mail', $user->email)->notify(new CandidateCreateApprovalPendingNotification($user, $password));
    //         //             }
    //         //         } elseif ($user->role == "company") {
    //         //             $employer_auto_activation_enabled = Setting::where("employer_auto_activation", 1)->count();
    //         //             if ($employer_auto_activation_enabled) {
    //         //                 Notification::route('mail', $user->email)->notify(new CompanyCreatedNotification($user, $password));
    //         //             } else {
    //         //                 Notification::route("mail", $user->email)->notify(new CompanyCreateApprovalPendingNotification($user, $password));
    //         //             }
    //         //         }
    //         //     }
    //         //     // session(['isLoggedIn' => true]);
    //         //     // Auth::guard('user')->login($user);
    //         //     return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
    //         // }
    //         // else{
    //                 $lead = new Lead;
    //                 $lead->name = $name;
    //                 $lead->email = $request->input('email');
    //                 $lead->phone = $request->input('phone');
    //                 $lead->country_id = $request->input('country');
    //                 $lead->url =  $request->input('url');
    //                 $lead->source =  $request->input('source');
    //                 $questions = [];
    //                 $questions['date'] = $request->input('date');
    //                 $questions['intake'] = $request->input('intake');
    //                 $jsonData = json_encode($questions);
    //                 $lead->description = $jsonData;
    //                 $lead = $lead->save();
    //                 // if(Auth::guard('user')){
    //                 //     Auth::guard('user')->login($oldUser);
    //                 // }
    //                 if($lead){
    //                     return ['status' => 1, 'msg' => 'Lead Submit Successfully'];
    //                 }            
    //                 // }
    //         return ['status' => 0, 'msg' => 'Data Not save in Lead Data'];
    //     }
    // }

    public function blog(Request $request)
    {
        // $blog = Page::all();
        // $category ? $category : '';
        $category_id = Category::Select('id')->where('parent_id', 15 )->get()->toArray();
        $popular = Page::whereIn('category_id',$category_id)->with('category')->published()->latest()->take(5)->get();
        $news = Page::where('category_id', 35)->published()->latest()->take(4)->get();
        $university = Page::where('category_id', 42)->published()->latest()->take(5)->get();
        $visa = Page::where('category_id', 41)->published()->with('category')->latest()->take(4)->get();
        $finance = Page::where('category_id', 38)->published()->latest()->take(1)->get();
        
        // $blogCategory = Page::where('url', $category)->all();
        // return $blog;
        return view('website.pages.blog', compact(['news','university','visa','finance','popular']));
    }

    public function blogCategory($slug)
    {
        // return $slug;
        // $news = Page::where('category_id', 35)->take(4)->get();
        // $university = Page::where('category_id', 42)->take(5)->get();

        if($slug == 'courses'){
            $blogCategory = Page::where('category_id', 36)->latest()->published()->paginate(12);
        }
        if($slug == 'university'){
            $blogCategory = Page::where('category_id', 42)->latest()->published()->paginate(12);
        }
        if($slug == 'exams'){
            $blogCategory = Page::where('category_id', 37)->latest()->published()->paginate(12);
        }
        if($slug == 'travel'){
            $blogCategory = Page::where('category_id', 43)->latest()->published()->paginate(12);  
        }
        if($slug == 'finance'){
            $blogCategory = Page::where('category_id', 38)->latest()->published()->paginate(12);
        }
        if($slug == 'visa'){
            $blogCategory = Page::where('category_id', 41)->latest()->published()->paginate(12);
        }
        if($slug == 'scholarships'){
            $blogCategory = Page::where('category_id', 40)->latest()->published()->paginate(12);
        }
        if($slug == 'jobs'){
            $blogCategory = Page::where('category_id', 39)->latest()->published()->paginate(12);  
        }
        if($slug == 'news'){
            $blogCategory = Page::where('category_id', 35)->latest()->published()->paginate(12);  
        }
        if(empty($blogCategory)) abort(404);
        return view('website.pages.blogCategory', compact(['blogCategory','slug']));

    }

    public function blogSearch(Request $request)
    {
        $category = Category::Select('id')->where('parent_id',15)->get()->toArray();
        $blogSearch = Page::where('header_title','like','%'.$request->q.'%')->whereIn('category_id', $category)->with('category')->published()->paginate(12);
        return view('website.pages.blogSearch', compact(['blogSearch']));
    }


    public function blogDetails(Request $request)
    {

        return view('website.pages.blog-details');

    }


    public function searchData(Request $search)
    {
        $condition=['status'=>1];
        $search = $search["search"]?? "";
        if($search!= "")
        {
            $data = Course::where('name','like','%'.$search.'%')->with('university')->get();

            if(count($data)>0)
            {
                $universityData = Universities::where('status',1)->whereIn('id',$data->pluck('university_id'))->with('countries')->get();
            }
            else 
            {
                $universityData = Universities::where('name','like','%'.$search.'%')->with('countries')->where($condition)->get();
                $data = Course::whereIn('id', $universityData->pluck('id'))->with('university')->get();
            }
            return view('website.pages.search', compact(['data','universityData']));
        }
        else
        {
            return view('website.pages.index');
        }

        // $data = Course::where('name','like','%'.$search.'%')->with('university')->get()->toArray();
        // $universityData = Universities::where('name','like','%'.$search.'%')->with('courses')->get()->toArray();
    }


    public function countryNew(Request $request, $country)
    {
        // dd($country);
      $pages_categories = Page::where('url', $country)->where('category_id', 16)->published()->first();
        // $pages_categories = Category::with(['pages'])->where('type','page')
        // ->whereHas('pages', function ($q) use ($country) {
        //     $q->where('url', $country)
        //    ->where('category_id', 16);
        // })
        // ->first();
        // dd($pages_categories->country_id);
        if (empty($pages_categories)) abort(404);

        if(!empty($pages_categories->country_id)){
            $universityData = University::where('country_id',$pages_categories->country_id)->where('status', 1)->select('id', 'name', 'country_id','url')->get()->toArray();
            // dd($universityData);
            $courseCounts = Course::select('course_categories.name','course_categories.id', DB::raw('COUNT(courses.id) AS courseCount'))
            ->join('course_categories', 'course_categories.id', '=', 'courses.course_categories_id')
            ->whereIn('university_id', function ($query) use ($pages_categories){
                $query->select('id')
                    ->from('universities')
                    ->where('country_id', '=', $pages_categories->country_id);
            })
            ->groupBy(['course_categories.id','course_categories.name'])
            ->get()->toArray();
            $faqs = Faq::select('question', 'answer', 'category_id')->where('category_id', 33)->where('page_id',$pages_categories->country_id)->where('status', 1)->orderBy('id', 'desc')->get()->toArray();
        }else{
            $universityData = [];
            $courseCounts = [];
            $faqs = [];
        }

     
        

        return view('website.pages.company.new-country-details',compact('pages_categories','universityData','courseCounts','faqs','country'));
    
    }
    public function universitiesGetByCountry(Request $request)
    {
      
        if(!empty($request->country_id)){
            // $universities = University::where('country_id',$request->country_id)->get();
            $querys = Universities::query()->select('id', 'name', 'address', 'headerImageDesktop', 'url')->where('status', 1)->with('review');
            $querys->withCount('courses');
            // $querys->with(['review' => function ($query) {
            //     $query->select('id');
            // }]);
            if ($request->country_id) {
                $querys->where('country_id', $request->country_id);
            }
            if(!empty($request->universities_search)){
                $querys->where('name', 'LIKE', "%$request->universities_search%")
                ->orWhere('email', 'LIKE', "%$request->universities_search%");
            }

         
            $universities = $querys->whereNotNull('sorting')->get();
            $universitiesArray = $universities->map(function ($university) {
                return $university->toArray();
            })->all();

            foreach ($universitiesArray as $key => $value) {

                $universitiesArray[$key]['totel_star_rating'] = 0;
                if(!empty($value['review'])){  
                    $ratingTotel = (count($value['review'])*5);
                    $universitiesArray[$key]['totel_star_rating'] = 0;
                    $count_review = 0;
                    foreach ($value['review'] as $r_value) {
                       $count_review = $count_review+$r_value['star_rating']; 
                    }
                       $universitiesArray[$key]['totel_star_rating'] = ratingCalculate($count_review , $ratingTotel);  
                     
                }
            }
            
            
        }else{
            $universitiesArray = [];
        }

       

       
        return response()->json($universitiesArray);
   

    }

    public function reviewGetByCountry(Request $request)
    {

        // dd($request->all());
        // if(!empty($request->country_id)){
        //     $universityIds = University::where('country_id', $request->country_id)->pluck('id')->toArray();
        //     // dd($universityIds);
        //     // dd($universityIds);
         

        //     if(!empty($universityIds)){
        //         $querys = Review::query()->select('id', 'name', 'address', 'comments' ,'star_rating', 'display_date', 'created_at','images',)->where('category_id', 32)->orderBy('display_date','DESC');
        //         if ($universityIds) {
        //             $querys->whereIn('page_id', $universityIds);
        //         }
        //         if (!empty($request->rating_search)) {
        //             $querys->where('star_rating', $request->rating_search);
        //         }
        //         $reviews = $querys->get()->toArray();
        //     }else{
        //         $reviews = [];
        //     }
    
            
        // }else{
        //     $reviews = [];
        // }
        $reviews = [];
        if(!empty($request->country_id)){
            $querys = Review::query()->select('id', 'name', 'address', 'comments' ,'star_rating', 'display_date', 'created_at','images',)->where('category_id', 34)->where('page_id', $request->country_id)->orderBy('display_date','DESC');
                if (!empty($request->rating_search)) {
                    $querys->where('star_rating', $request->rating_search);
                }
                $reviews = $querys->get()->toArray();
        }

       


        // dd($reviews);

        return response()->json($reviews);
    }


    public function leadfrom(Request $request){
        // dd($request->all());
        $lead = new Lead;
        $lead->name = $request->input('name');
        $lead->email = $request->input('email');
        $lead->phone = $request->input('number');
        $lead->country_id = $request->input('country');
        $lead->url =  $request->input('url');
        $lead = $lead->save();
        $data = [
            'success' => true,
            'message'=> 'Successfully Saved'
          ] ;
          
          return response()->json($data);
       
    }



    public function newBlogDetails(Request $request, $blogType, $url)
    {
        $categories = Category::select('id','name')->where('type','page')->where('url', $blogType)->first();
        $all_blog_categories_ids = Category::where('parent_id', 15)->pluck('id')->toArray();

        if(!empty($all_blog_categories_ids)){
            $latest_blog = Page::select('id','header_title', 'category_id','url')->whereIn('category_id', $all_blog_categories_ids)->with(['category'])->latest()->published()->take(4)->get();
        }else{
            $latest_blog = null;
        }
        
        // dd($latest_blog[1]->category->name);

        if(!empty($categories)){
            $pages_categories = Page::where('url', $url)->where('category_id', $categories->id)->published()->first();
            if(!empty($pages_categories->tag_id)){
                $tag_ids = explode(",", $pages_categories->tag_id);
                $tags = Tag::whereIn('id', $tag_ids)->get()->toArray(); 
            }else{
                $tags = [];
            }

            if(!empty($pages_categories->comments)){
                $pages_categories->commentsCount =  count($pages_categories->comments) ;
            }else{
                // $pages_categories->comments = [];
                // $pages_categories->comments = 0;
            }
        
        }

    
        if (empty($pages_categories)) abort(404);
        return view('website.pages.new-blog-details', compact('pages_categories', 'tags', 'latest_blog'));

    }


    // public function city(Request $request)
    // {
    //     return view('website.pages.city');
    // }


    public function pageFormDataComment(Request $request)
    {

        $validator = Validator::make($request->all(), [
            'comment' => 'required|max:2500|min:2',
            'page_id' => 'required',
        ]);

        if ($validator->fails()) {

            return ['status' => 0, 
            'msg' => 'The given data was invalid.',
            'errors' => $validator->errors(),
            ];

        }
    

        $comment = new PageComment();
        $comment->page_id = $request->page_id;
        // $comment->parent_id = $request->parent_id;
        if (auth('user')->check()) {
            $comment->name = auth('user')->user()->name;
            $comment->email = auth('user')->user()->email;
            $comment->created_by =  auth('user')->user()->id;
        }else{
            $comment->name = $request->name;
            $comment->email = $request->email;
        }
  
        $comment->comment = $request->comment;
        $comment->user_type = "user";
        $comment->url = $request->url;
        $comment->status = 0;
        $comment->save();

        if (!empty($comment)) {
            $lead = new Lead;
            $lead->name = $comment->name;
            $lead->email = $comment->email;
            // $lead->phone = $comment->number;
            // $lead->country_id = $comment->country;
            $lead->url = $comment->url;
            $lead = $lead->save();
    
            return ['status' => 1, 'msg' => 'Comment Submit Successfully'];
        }
        return ['status' => 0, 'msg' => 'Data Not save in Comment Data'];

    
    }

    

    // public function parent_category(Request $request){

    //     // qury to get category data parent_cat = 0 and url = "consultancy";
    //     // template_name
    //     $template_name = 'blog1';

    //     return $this->$template_name($request);

    // }

    // function child_category() {
        
    // }

    // function consultancyPage(){
    //     echo "consultancyPage";
    //     // die;
    // }
    
    // public function blog1($request)
    // {
    //     // $blog = Page::all();
    //     // $category ? $category : '';
    //     $popular = Page::orderBy('id', 'desc')->take(4)->with('category')->get();
    //     $news = Page::where('category_id', 35)->take(4)->get();
    //     $university = Page::where('category_id', 42)->take(5)->get();
    //     $visa = Page::where('category_id', 41)->take(4)->get();
    //     $finance = Page::where('category_id', 38)->take(1)->get();
    //     // die("1");
        
    //     // $blogCategory = Page::where('url', $category)->all();
    //     // return $blog;
    //     return view('website.pages.blog', compact(['news','university','visa','finance','popular']));
    // }


    public function consultancy()
    {
        return view('website.pages.Consultancy');
    }

    // public function consultancyCountry($country)
    // {
    //         $country = Page::where('url',$country)->where('category_id', 45)->published()->first();
    //         if(!empty($country)){
    //             return view('website.pages.consultancyCountry', compact(['country']));
    //         }
    //         abort(404);
    // }

    public function consultancyCountry()
    {
        $address = Address::all();
        return view('website.pages.consultancyCountry', compact('address'));
    }
    // public function booksession()
    // {
    //         return view('website.pages.booksession');
    // }

    public function consultancyCity($country, $city)
    {
        $name = $city;
        $country = Category::where('url',$country)->where('parent_id',47)->first();
        if($country){
            $city = Page::where('url',$city)->where('category_id', $country->id)->published()->with('faq' , 'address')->first();
            if(empty($city) || empty($country)) abort(404);
            $address = Address::where('page_id',$city->id)->first();
            $nearbyCity = Page::where('category_id', $country->id)->where('url','!=' , $name)->published()->get();
            $tags= '';
            if(!empty($address)){
                $tags = explode(",", @$address->local_areas);
            }
            return view('website.pages.city', compact(['city','address','tags','nearbyCity']));
        }
    }


}
