<?php

namespace App\Http\Controllers\Admin;

use Carbon\Carbon;
use App\Models\User;
use App\Models\Skill;
use App\Models\JobRole;
use App\Models\Candidate;
use App\Models\Webinars;
use App\Models\Education;
use App\Models\InterestedCandidatesWebinar;
use App\Models\Experience;
use App\Models\Profession;
// use App\Models\ContactInfo;
use App\Models\UniversitySuggest;
use App\Models\Universities;
use App\Models\Course;
use App\Models\Intake;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use App\Models\SkillTranslation;
use App\Models\CandidateLanguage;
use Illuminate\Support\Facades\DB;
use Modules\Location\Entities\City;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Modules\Location\Entities\State;
use Modules\Location\Entities\Country;
use App\Http\Requests\CandidateRequest;
use Modules\Language\Entities\Language;
use App\Models\Setting;
use App\Notifications\CandidateCreateApprovalPendingNotification;
use Illuminate\Support\Facades\Notification;
use App\Notifications\CandidateCreateNotification;
use App\Notifications\UpdateCompanyPassNotification;
use App\Models\Documents;
use App\Models\DocumentSubcategory;
use Illuminate\Support\Facades\Storage;
use App\Models\DocumentCategory;
use App\Models\IndianUniversity;
use App\Models\Countries;
use App\Models\CandidateEducation;
use App\Models\CandidateDestination;
use App\Models\Followup;
use App\Models\CandidateExam;
use App\Models\Admin;
use PhpOffice\PhpSpreadsheet\Worksheet\Row;
use Spatie\Permission\Models\Role;
use App\Models\Source;
use App\Models\University;
use Illuminate\Validation\Rule;
use App\Models\UserTimeline;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use App\Models\Diploma_course;
use Illuminate\Support\Facades\Redirect;
use App\Notifications\AssignToChangeNotification;
use App\Exports\CustomerReportExport;
use Maatwebsite\Excel\Facades\Excel;
use Symfony\Component\HttpFoundation\StreamedResponse;
use App\Models\WhatsappTemplate;
use App\Models\Partner;
use App\Models\Service;
use Illuminate\Support\Facades\Crypt;
use League\Csv\Writer;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
// use App\Models\City;
// use App\Models\State;

class CandidateController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */



    public function index(Request $request)
    {
    //  dd($request->all());
        abort_if(!userCan('candidate.view'), 403);
        $endDateF = Carbon::now()->endOfDay()->format('Y-m-d H:i:s');
        $roleNames = Auth()->user()->getRoleNames()->toArray();
        $leadManagerEnvRole = env('LEAD_MANAGER_ROLE', 'Lead Manager');

        $adminRoleNames = auth('admin')->user()->getRoleNames()->toArray();
        $roleEnvNames = explode(',', env('AVAILABLE_LEAD_ROLES', 'Lead Manager,Operation Manager'));
        // $admin_list = Admin::where('id', '!=', 1)
        //     ->whereHas('roles', function ($query) use ($roleEnvNames) {
        //         $query->whereIn('name', $roleEnvNames);
        //     })
        //     ->get()
        //     ->toArray();

        $admin_list = Admin::where('id', '!=', 1)
        ->whereHas('roles', function ($query) use ($leadManagerEnvRole) {
            $query->where('name', $leadManagerEnvRole);
        })
        ->get()
        ->toArray();

        $role_AVAILABLE_RM_ROLES = explode(',', env('AVAILABLE_RM_ROLES', 'Operation Manager'));
        $admin_list_Operation = Admin::where('id', '!=', 1)
        ->whereHas('roles', function ($query) use ($role_AVAILABLE_RM_ROLES) {
            $query->whereIn('name', $role_AVAILABLE_RM_ROLES);
        })
        ->get()
        ->toArray();

        $trashed = $request->input('trashed');

        // $query = Candidate::select('id','user_id','role_id','profession_id','experience_id','education_id');with(['user' => function ($q) use ($trashed) {
        //     if ($trashed === 'true') {
        //         $q->onlyTrashed();
        //     } else {
        //         $q->whereNull('deleted_at'); 
        //     }
        // }], 'followup');

        $query = Candidate::select('id', 'user_id', 'role_id', 'profession_id', 'experience_id', 'education_id','created_at','updated_at')
        ->with(['user' => function ($q) use ($trashed) {
            $q->select('source','id','name','email','assign_from','country_code','phone','stages','status','created_at','last_activity_date','assign_to','assigned_rm','updated_at');
            if ($trashed === 'true') {
                $q->onlyTrashed();
            } else {
                $q->whereNull('deleted_at');
            }
        }])
        ->with(['followup' => function ($q)  {
            $q->select('id','created_at','datetime','comment','admin_id','user_id','close_status');
         
        }],
        ['followup.admin' => function ($q)  {
            $q->select('id','name');
         
        }]);
        
            
        
        
            if($request->has('name') || $request->input('id') || $request->input('email') || $request->input('source') || 
            $request->input('stages') || $request->input('phone') || $request->input('daterange') || $request->input('daterange_activity') || 
            $request->input('country') ||  $request->input('preferred_country') || $request->input('assigned_rm') || $request->input('assign_to') || $request->input('intake') || $request->input('student_category') || 
            $request->input('followUp')){
                $query->whereHas('user', function ($q) use ($request,$roleEnvNames, $adminRoleNames,$leadManagerEnvRole, $roleNames) {
                    if ($request->has('name')) {
                        $fullName = $request->input('name');
                        $q->where(function ($innerQuery) use ($fullName) {
                            $innerQuery->whereRaw("CONCAT_WS(' ', name, middle_name, last_name) LIKE ?", ["%$fullName%"])
                                    ->orWhere('email', 'LIKE', "%$fullName%")
                                    ->orWhere('secondary_email', 'LIKE', "%$fullName%");
                        });
                    }
                    if (!empty($request->input('id'))) {
                        $q->where('id', $request->id);
                    }
            
                    if (!empty($request->input('email'))) {
                        $q->where('email', 'LIKE', '%' . $request->email . '%');
                    }
            
                    if (!empty($request->input('source'))) {
                        $q->where('source', $request->source);
                    }

                    if (!empty($request->input('stages'))) {
                        $q->where('stages', $request->stages);
                    }
            
                    if (!empty($request->input('phone'))) {
                        $q->where('phone', 'LIKE', '%' . $request->phone . '%')
                        ->orWhere('alternate_phone', 'LIKE', '%' . $request->phone . '%')   
                        ->orWhereHas('leads', function ($q) use ($request) {
                            $q->where('phone', 'LIKE', '%' . $request->phone . '%');
                        });
                        
                    }

                    if (!empty($request->input('daterange'))) {
                        $dates = explode(' - ', $request->input('daterange'));
                        $startDate = Carbon::createFromFormat('m/d/Y', $dates[0])->startOfDay();
                        $endDate = Carbon::createFromFormat('m/d/Y', $dates[1])->endOfDay();
                        $q->whereBetween('created_at', [$startDate, $endDate]);
                    }

                    if (!empty($request->input('daterange_activity'))) {
                        $dates_activity = explode(' - ', $request->input('daterange_activity'));
                        $startDate_activity = Carbon::createFromFormat('m/d/Y', $dates_activity[0])->startOfDay();
                        $endDate_activity = Carbon::createFromFormat('m/d/Y', $dates_activity[1])->endOfDay();
                        $q->whereBetween('last_activity_date', [$startDate_activity, $endDate_activity]);
                    }

                    if (!empty($request->input('country'))) {
                        $q->where('country', 'LIKE', '%' . $request->input('country') . '%');
                    }
               
                    if(userCan('admin.assign_list') || userCan('admin.assign')){
                        if(!empty($request->input('assign_to')) && $request->input('assign_to') == "na"){
                            $q->whereNull('assign_to');
                        }elseif(!empty($request->input('assign_to')) && $request->input('assign_to') != "na"){
                            $q->where('assign_to', $request->input('assign_to'));
                        }
                    }


                    if(userCan('candidate.assignedRm')){
                        if(!empty($request->input('assigned_rm')) && $request->input('assigned_rm') == "na"){
                            $q->whereNull('assigned_rm')
                            ->orWhere('assigned_rm', 0);
                        }elseif(!empty($request->input('assigned_rm')) && $request->input('assigned_rm') != "na"){
                            $q->where('assigned_rm', $request->input('assigned_rm'));
                        }
                    }
                
                });

                if (!empty($request->input('intake'))) {
                    $query->whereHas('destination', function ($q) use ($request) {
                        if (!empty($request->input('intake'))) {
                            $q->where('intake', $request->intake);
                        }
                    });
                    }
        
                    if(!empty($request->input('student_category')) && $request->input('student_category') == "na"){
                        $query->whereNull('student_category');
                    } else if (!empty($request->input('student_category'))) {
                            $query->where('student_category', $request->student_category);
                    }


                    if (!empty($request->input('preferred_country'))) {
                        $query->whereHas('destination', function ($q) use ($request) {
                            $preferredCountries = $request->input('preferred_country', []);
                            $q->whereNotNull('preferred_country');
                            
                            foreach ($preferredCountries as $country) {
                                $q->where(function ($innerQuery) use ($country) {
                                    $innerQuery->whereRaw("FIND_IN_SET($country,preferred_country)");
                                });
                            }
                        });
                    }
        
                    
        
                    if (!empty($request->input('followUp'))) {
                        $followupValue = $request->input('followUp');
                        if ($followupValue == "no_followUp") {
                            // if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                            //       $query->whereHas('user', function ($q){
                            //           $q->whereDoesntHave('myFollowups');
                            //       });
                            // }else{
                            //     $query->whereDoesntHave('followup');
                            // }

                            // if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                            //         $query->whereDoesntHave('followup', function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
                            //             if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                            //                 $query->where('admin_id', $request->input('assign_to'));
                            //             } else {
                            //                 // If Auth::user()->id is set and the user has the leadManagerEnvRole
                            //                 if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                            //                     $query->where('admin_id', Auth::user()->id);
                            //                 }
                            //             }
                            //         });
                            // }else{
                            //     $query->whereDoesntHave('followup');
                            // }

                            $query->whereDoesntHave('followup', function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
                                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                                    $query->where('admin_id', $request->input('assign_to'));
                                } else {
                                    // If Auth::user()->id is set and the user has the leadManagerEnvRole
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                        $query->where('admin_id', Auth::user()->id);
                                    }
                                }
                            });

                      

                            // $query->whereDoesntHave('followup');
                            
                        } elseif ($followupValue == "all") {
                            $query->whereHas('followup', function ($q) {
                                $q->whereNotNull('id');
                            });
                        }
                        
                        // $query->whereHas('followup', function ($q) use ($followupValue) {
                        //     // if ($followupValue == "all") {
                        //     //     $q->whereNotNull('id');
                        //     // } elseif ($followupValue == "no_followUp") {
                        //     //     $q->whereNull('id');
                        //     // }
                        // });
                    }


                    if ($request->keyword && $request->keyword != null) {

                        $query->whereHas('user', function ($q) use ($request) {
            
                            $q->where('name', 'LIKE', "%$request->keyword%")
                                ->orWhere('email', 'LIKE', "%$request->keyword%")
                                ->orWhere('phone', 'LIKE', "%$request->keyword%");
                        });
                    }


                    if (!empty(@$request->assign_from)) {
                        if(@$request->assign_from && $request->assign_from == "All"){
                            $query->whereHas('user', function ($q){
                                $q->whereNotNull('assign_from');
                            });
                           
                        }else{
                            $query->whereHas('user', function ($q) use ($request){
                                $q->where('assign_from', $request->assign_from);
                            });
                        }

                    }

                    if ($request->sort_by == 'latest') {
                        $query->latest();
                    } else if ($request->sort_by == 'latestUpdate') {
                        $query->latest("updated_at");
                    } else if ($request->sort_by == 'oldest' ) {
                        $query->oldest();
                    } else if ($request->sort_by == 'oldestUpdate') {
                        $query->oldest("updated_at");
                    // } else if ($request->sort_by == 'last_activity_date') {  
                    //     $query->whereHas('user', function ($q) use ($request) {
                    //         $q->orderByDesc('last_activity_date');
                    //         // $q->orderBy('last_activity_date', 'DESC');
                    //         // $q->orderBy('last_activity_date', 'DESC');
                    //         // $q->orderBy('last_activity_date', 'DESC');
                    //         // $q->latest("last_activity_date");
                    //     });    
                    // } else { 
                    } else if ($request->sort_by == 'last_activity_date') {
                        $query->orderByDesc(function ($q) {
                            $q->select('last_activity_date')
                                ->from('users')
                                ->whereColumn('candidates.user_id', 'users.id')
                                ->whereNull('users.deleted_at')
                                ->orderBy('last_activity_date')
                                ->limit(1);
                        });
                    } else {
                        $query->latest();
                    }

                    $totalCandidatesCount = $query->count();
                
                
            
                    if ($trashed === 'true') {
                    
                        $query->whereHas('user', function ($q) {
                            $q->onlyTrashed();
                        });
                        $candidates = $query->onlyTrashed()->paginate(20)->withQueryString();
                    } else { 
            
                        // $query->whereHas('user', function ($q) use ($request,$leadManagerEnvRole, $roleNames) {
                        //     if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        //             if(userCan('admin.assign_list') || userCan('admin.assign')){
                        //                 if(!empty($request->input('assign_to')) && $request->input('assign_to') == "na"){
                        //                     $q->whereNull('assign_to');
                        //                 }elseif(!empty($request->input('assign_to')) && $request->input('assign_to') != "na"){
                        //                     $q->where('assign_to', $request->input('assign_to'));
                        //                     $q->whereNotNull('assign_to');
                        //                 }else{
                        //                     $q->where('assign_to', Auth::user()->id);  
                        //                     $q->whereNotNull('assign_to');      
                        //                 }
                                    
                        //             }else{
                        //                 $q->where('assign_to', Auth::user()->id);  
                        //                 $q->whereNotNull('assign_to');      
                        //             }
                        //         }
                        //     });
                        
                        $candidates = $query->paginate(20)->withQueryString();
                    }


            }else{

                            if (!empty(@$request->assign_from)) {
                                if(@$request->assign_from && $request->assign_from == "All"){
                                    $query->whereHas('user', function ($q){
                                        $q->whereNotNull('assign_from');
                                    });
                                   
                                }else{
                                    $query->whereHas('user', function ($q) use ($request){
                                        $q->where('assign_from', $request->assign_from);
                                    });
                                }

                            }
            
                            if ($request->sort_by == 'latest') {
                                $query->latest();
                            } else if ($request->sort_by == 'latestUpdate') {
                                $query->latest("updated_at");
                            } else if ($request->sort_by == 'oldest' ) {
                                $query->oldest();
                            } else if ($request->sort_by == 'oldestUpdate') {
                                $query->oldest("updated_at");
                            // } else if ($request->sort_by == 'last_activity_date') {  
                            //     $query->whereHas('user', function ($q) use ($request) {
                            //         $q->orderByDesc('last_activity_date');
                            //         // $q->orderBy('last_activity_date', 'DESC');
                            //         // $q->orderBy('last_activity_date', 'DESC');
                            //         // $q->orderBy('last_activity_date', 'DESC');
                            //         // $q->latest("last_activity_date");
                            //     });    
                            // } else {
                            } else if ($request->sort_by == 'last_activity_date') {
                                $query->orderByDesc(function ($q) {
                                    $q->select('last_activity_date')
                                        ->from('users')
                                        ->whereColumn('candidates.user_id', 'users.id')
                                        ->whereNull('users.deleted_at')
                                        ->orderBy('last_activity_date')
                                        ->limit(1);
                                });
                            } else {
                                $query->latest();
                            }
                            
                          
                        
                            if (!empty($request->input('openLeadButton')) && $request->input('openLeadButton') == "1") {
                                $query->whereHas('followup', function ($q) {
                                    $q->where('close_status', '!=', 1)
                                      ->orderBy('created_at', 'desc')
                                      ->limit(1);
                                });
                            }


                            if (!empty($request->input('leadButton')) && $request->input('leadButton') == "1") {
                                $query->whereHas('user', function ($q) use ($request,$roleEnvNames, $adminRoleNames,$leadManagerEnvRole, $roleNames) {
                                    $q->whereIn('stages', ['Inquiry','Counselling','Documents Received','Document pending','University to be suggested','Universities suggested']);
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                        $q->where('assign_to', Auth::user()->id);   
                                    }

                                })->whereHas('followup', function ($q) use ($request, $roleNames, $leadManagerEnvRole,$endDateF) {
                                    $q->where('datetime', '<=',$endDateF)->where('close_status', 0);
                              });
                            }

                            if (!empty($request->input('applicationButton')) && $request->input('applicationButton') == "1") {
                                $query->whereHas('user', function ($q) use ($request,$roleEnvNames, $adminRoleNames,$leadManagerEnvRole, $roleNames) {
                                    $q->whereIn('stages', ['Application ready to submit', 'Application submitted','Application Rejected','Application resubmitted','Admission Letter Pending']);
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                        $q->where('assign_to', Auth::user()->id);   
                                    }

                                })->whereHas('followup', function ($q) use ($request, $roleNames, $leadManagerEnvRole,$endDateF) {
                                    $q->where('datetime', '<=',$endDateF)->where('close_status', 0);
                              });
                            }
                            if (!empty($request->input('offerButton')) && $request->input('offerButton') == "1") {
                                $query->whereHas('user', function ($q) use ($request,$roleEnvNames, $adminRoleNames,$leadManagerEnvRole, $roleNames) {
                                    $q->whereIn('stages', ['Offer Issued','Offer Accepted','Offer Rejected']);
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                        $q->where('assign_to', Auth::user()->id);   
                                    }

                                })->whereHas('followup', function ($q) use ($request, $roleNames, $leadManagerEnvRole,$endDateF) {
                                    $q->where('datetime', '<=',$endDateF)->where('close_status', 0);
                              });
                            }

                            if (!empty($request->input('feePaymentButton')) && $request->input('feePaymentButton') == "1") {
                                $query->whereHas('user', function ($q) use ($request,$roleEnvNames, $adminRoleNames,$leadManagerEnvRole, $roleNames) {
                                    $q->whereIn('stages', ['Initial Fee / Tuition Fee Deposit']);
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                        $q->where('assign_to', Auth::user()->id);   
                                    }

                                })->whereHas('followup', function ($q) use ($request, $roleNames, $leadManagerEnvRole,$endDateF) {
                                    $q->where('datetime', '<=',$endDateF)->where('close_status', 0);
                              });
                            }

                            if (!empty($request->input('droppedButton')) && $request->input('droppedButton') == "1") {
                                $query->whereHas('user', function ($q) use ($request,$roleEnvNames, $adminRoleNames,$leadManagerEnvRole, $roleNames) {
                                    $q->whereIn('stages', ['Student backed out / Dropped']);
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                        $q->where('assign_to', Auth::user()->id);   
                                    }

                                })->whereHas('followup', function ($q) use ($request, $roleNames, $leadManagerEnvRole,$endDateF) {
                                    $q->where('datetime', '<=',$endDateF)->where('close_status', 0);
                              });
                            }

                            if (!empty($request->input('visaButton')) && $request->input('visaButton') == "1") {
                                $query->whereHas('user', function ($q) use ($request,$roleEnvNames, $adminRoleNames,$leadManagerEnvRole, $roleNames) {
                                    $q->whereIn('stages', ['Visa Rejected','Visa Accepted','Visa In Process','Work Visa']);
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                        $q->where('assign_to', Auth::user()->id);   
                                    }

                                })->whereHas('followup', function ($q) use ($request, $roleNames, $leadManagerEnvRole,$endDateF) {
                                    $q->where('datetime', '<=',$endDateF)->where('close_status', 0);
                              });
                            }
                             
                          
                            if ($trashed === 'true') {
                            
                                $query->whereHas('user', function ($q) {
                                    $q->onlyTrashed();
                                });
                                // $totalCandidatesCount = $query->count();
                                $candidates = $query->onlyTrashed()->paginate(20)->withQueryString();
                            } else {
                    
                                $query->whereHas('user', function ($q) use ($request,$leadManagerEnvRole, $roleNames) {
                                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                                            if(userCan('admin.assign_list') || userCan('admin.assign')){
                                                if(!empty($request->input('assign_to')) && $request->input('assign_to') == "na"){
                                                    $q->whereNull('assign_to');
                                                }elseif(!empty($request->input('assign_to')) && $request->input('assign_to') != "na"){
                                                    $q->where('assign_to', $request->input('assign_to'));
                                                    $q->whereNotNull('assign_to');
                                                }else{
                                                    
                                                    $q->where('assign_to', Auth::user()->id);  
                                                    $q->whereNotNull('assign_to');      
                                                }
                                            
                                            }else{
                                                // $q->where('assign_to', Auth::user()->id);  
                                                $q->whereNotNull('assign_to');      
                                            }
                                        }
                                    });
                               
                                // $totalCandidatesCount = $query->count();
                                $candidates = $query->paginate(20)->withQueryString();
                               
                            }
                            $totalCandidatesCount = $query->count();
            }

          

        $main_intake = [];
        // $main_intake = Intake::whereIn('status', [1])->pluck('name')->toArray();  
        $sourcesData = Source::distinct('name')->with("source")->where("parent_id",null)->get();
        $countries = Country::all('id','name');
        // $whatsappTemplate = WhatsappTemplate::all();
        // dd($candidates);
        return view('admin.candidate.index', compact('candidates','sourcesData','totalCandidatesCount', 
        'admin_list','roleEnvNames','adminRoleNames','countries',
         'main_intake','leadManagerEnvRole','admin_list_Operation'
        ));
        
        // return view('admin.candidate.index', compact('candidates','sourcesData','totalCandidatesCount', 
        // 'admin_list', 'pendingFollowUpCount', 'myNonfollowedcount', 'roleEnvNames','adminRoleNames','countries',
        // 'leadButtonCount','applicationButtonCount','offerButtonCount','feePaymentButtonCount','visaButtonCount',
        // 'visaButtonCount','droppedButtonCount','main_intake','leadManagerEnvRole','whatsappTemplate','admin_list_Operation'
        // ));

       
    }


    public function candidateCounts(Request $request)
    {
        abort_if(!userCan('candidate.view'), 403);
        $endDateF = Carbon::now()->endOfDay()->format('Y-m-d H:i:s');
        $roleNames = Auth()->user()->getRoleNames()->toArray();
        $leadManagerEnvRole = env('LEAD_MANAGER_ROLE', 'Lead Manager');

        $trashed = $request->input('trashed');
     
        // $pendingFollowUpCount = Followup::where('datetime', '<=',$endDateF)->where('close_status', 0)->where('assign_to', Auth::user()->id)->count();
        $pendingFollowUpCount = Followup::select('id','datetime','user_id','assign_to','close_status')->where('datetime', '<=', $endDateF)
            ->where('close_status', 0)
            ->where(function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $query->where('assign_to', $request->input('assign_to'));
                } else {
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $query->where('assign_to', Auth::user()->id);
                    }
                }
            })->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
                // if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                //     $q->where('assign_to', $request->input('assign_to'));
                // } else {
                //     if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                //         $q->where('assign_to', Auth::user()->id);
                //     }
                // }
            })->count();

            $query = Followup::select('id','datetime','user_id','assign_to','close_status')->where('datetime', '<=', $endDateF)
            ->where('close_status', 0)
            ->where(function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $query->where('assign_to', $request->input('assign_to'));
                } else {
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $query->where('assign_to', Auth::user()->id);
                    }
                }
            })
            ->with(['user' => function ($q)  {
                $q->select('id','stages','assign_to');
             
            }])
            ->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
               
                    // if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    //     $q->where('assign_to', $request->input('assign_to'));
                    // } else {
                    //     if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                    //         $q->where('assign_to', Auth::user()->id);
                    //     }
                    // }
            })->get();


            $myNonfollowedcount = 0;
            $leadButtonCount = 0;
            $applicationButtonCount = 0;
            $offerButtonCount = 0;
            $feePaymentButtonCount = 0;
            $droppedButtonCount = 0;
            $visaButtonCount = 0;


            $leadButtonCount = $query->whereIn('user.stages', ['Inquiry','Counselling','Documents Received','Document pending','University to be suggested','Universities suggested'])->count();

            $applicationButtonCount = $query->whereIn('user.stages', ['Application ready to submit', 'Application submitted','Application Rejected','Application resubmitted','Admission Letter Pending'])->count();

            $offerButtonCount = $query->whereIn('user.stages', ['Offer Issued','Offer Accepted','Offer Rejected'])->count();

            $droppedButtonCount = $query->whereIn('user.stages', ['Student backed out / Dropped'])->count();

            $feePaymentButtonCount = $query->whereIn('user.stages', ['Initial Fee / Tuition Fee Deposit'])->count();

            $visaButtonCount = $query->whereIn('user.stages', ['Visa Rejected','Visa Accepted','Visa In Process','Work Visa'])->count();


           
            $querys = Candidate::with(['user' => function ($q) use ($trashed) {
                if ($trashed === 'true') {
                    $q->onlyTrashed();
                } else {
                    $q->whereNull('deleted_at'); 
                }
            }],'followup');

            // $querys = Candidate::select('id', 'user_id')->with(['user' => function ($q) use ($trashed) {
            //     $q->select('id','assign_to','stages');
            //     if ($trashed === 'true') {
            //         $q->onlyTrashed();
            //     } else {
            //         $q->whereNull('deleted_at'); 
            //     }
            // }])
            // ->with(['followup' => function ($q)  {
            //     $q->select('id','datetime','admin_id','user_id','close_status');
             
            // }])->get();
            

            // // dd($querys[0]->followup);

        
            $myNonfollowedcount = $querys->whereDoesntHave('followup', function ($queryss) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $queryss->where('admin_id', $request->input('assign_to'));
                } else {
                    // If Auth::user()->id is set and the user has the leadManagerEnvRole
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $queryss->where('admin_id', Auth::user()->id);
                    }
                }
            })
            ->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $q->where('assign_to', $request->input('assign_to'));
                } else {
                    // If Auth::user()->id is set and the user has the leadManagerEnvRole
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $q->where('assign_to', Auth::user()->id);
                    }
                }
            })->count();

            // $querys = Candidate::select('id', 'user_id')
            //     ->with(['user' => function ($q) use ($trashed) {
            //         $q->select('id', 'assign_to', 'stages');
            //         if ($trashed === 'true') {
            //             $q->onlyTrashed();
            //         } else {
            //             $q->whereNull('deleted_at'); 
            //         }
            //     }])
            //     ->with(['followup' => function ($q) {
            //         $q->select('id', 'datetime', 'admin_id', 'user_id', 'close_status');
            //     }])
            //     ->whereDoesntHave('followup', function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
            //         if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
            //             $query->where('admin_id', $request->input('assign_to'));
            //         } else {
            //             if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
            //                 $query->where('admin_id', Auth::user()->id);
            //             }
            //         }
            //     })
            //     ->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
            //         if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
            //             $q->where('assign_to', $request->input('assign_to'));
            //         } else {
            //             if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
            //                 $q->where('assign_to', Auth::user()->id);
            //             }
            //         }
            //     })
            //     ->get();

            // $myNonfollowedcount = $querys->count();

            
               
        $responseData = [
            'pendingFollowUpCount' => $pendingFollowUpCount,
            'myNonfollowedcount' => $myNonfollowedcount,
            'leadButtonCount' => $leadButtonCount,
            'applicationButtonCount' => $applicationButtonCount,
            'offerButtonCount' => $offerButtonCount,
            'feePaymentButtonCount' => $feePaymentButtonCount,
            'droppedButtonCount' => $droppedButtonCount,
            'visaButtonCount' => $visaButtonCount,
        ];
        
        return response()->json($responseData);
       
    }


    public function customerReport(Request $request)
    {
    //    dd($request->all());
        abort_if(!userCan('candidate.view'), 403);
        $sourceOptions = User::join('candidates', 'users.id', '=', 'candidates.user_id')
        ->whereNull('candidates.deleted_at')
        ->whereNull('users.deleted_at')
        ->whereNotNull('users.source') 
        ->where('users.source', '!=', '')
        ->distinct('users.source')
        ->pluck('users.source');


        $roleEnvNames = explode(',', env('AVAILABLE_LEAD_ROLES', 'Lead Manager,Operation Manager'));
        $admin_list = Admin::where('id', '!=', 1)
            ->whereHas('roles', function ($query) use ($roleEnvNames) {
                $query->whereIn('name', $roleEnvNames);
            })
            ->get()
            ->toArray();
        
        // $admin_list = Admin::where('id', '!=', 1)
        //          ->whereHas('roles', function ($query) {
        //              $query->whereIn('name', ['Lead Manager','Operation Manager']);
        //          })
        //          ->get()->toArray();
    
        // $query = Candidate::withCount('appliedJobs')->with('user', 'jobRole', 'followup');
        $query = Candidate::with('user','user.timeLine','followup');

        // verified status
        if ($request->has('ev_status') && $request->ev_status != null) {
            $ev_status = null;
            if ($request->ev_status == 'true') {
                $query->whereHas('user', function ($q) use ($ev_status) {
                    $q->whereNotNull('email_verified_at');
                });
            } else {
                $query->whereHas('user', function ($q) use ($ev_status) {
                    $q->whereNull('email_verified_at');
                });
            }
        }
        
        
            $query->whereHas('user', function ($q) use ($request) {
                if ($request->has('name')) {
                    $fullName = $request->input('name');
                    $q->where(function ($innerQuery) use ($fullName) {
                        $innerQuery->whereRaw("CONCAT_WS(' ', name, middle_name, last_name) LIKE ?", ["%$fullName%"])
                                   ->orWhere('email', 'LIKE', "%$fullName%")
                                   ->orWhere('secondary_email', 'LIKE', "%$fullName%");
                    });
                }
                if (!empty($request->input('id'))) {
                    $q->where('id', $request->id);
                }
        
                if (!empty($request->input('email'))) {
                    $q->where('email', 'LIKE', '%' . $request->email . '%');
                }
        // dd($request->source);
                if (!empty($request->input('source'))) {
                    $q->whereIn('source', $request->source);
                }

            
        
                if (!empty($request->input('phone'))) {
                    $q->where('phone', 'LIKE', '%' . $request->phone . '%')
                    ->orWhere('alternate_phone', 'LIKE', '%' . $request->phone . '%')   
                    ->orWhereHas('leads', function ($q) use ($request) {
                        $q->where('phone', 'LIKE', '%' . $request->phone . '%');
                    });
                    
                }
               if(@$request->sarechType != "candidate_timeline"){

                if (!empty($request->input('stages'))) {
                    $q->where('stages', $request->stages);
                }
                
                if (!empty($request->input('daterange'))) {
                    $dates = explode(' - ', $request->input('daterange'));
                    $startDate = Carbon::createFromFormat('m/d/Y', $dates[0])->startOfDay();
                    $endDate = Carbon::createFromFormat('m/d/Y', $dates[1])->endOfDay();
                    $q->whereBetween('created_at', [$startDate, $endDate]);
                }
               }

            

                if (!empty($request->input('daterange_activity'))) {
                    $dates_activity = explode(' - ', $request->input('daterange_activity'));
                    $startDate_activity = Carbon::createFromFormat('m/d/Y', $dates_activity[0])->startOfDay();
                    $endDate_activity = Carbon::createFromFormat('m/d/Y', $dates_activity[1])->endOfDay();
                    $q->whereBetween('last_activity_date', [$startDate_activity, $endDate_activity]);
                }

                if (!empty($request->input('country'))) {
                    $q->where('country', 'LIKE', '%' . $request->input('country') . '%');
                }
                // dd("test");
                if(userCan('admin.assign_list')){
                    if(!empty($request->input('assign_to'))){
                        $q->where('assign_to', $request->input('assign_to'));
                    }
                }
                // else{
                //    $q->where('assign_to', Auth()->user()->id);        
                // }
            
            });
   
            if (!empty($request->input('intake'))) {
            $query->whereHas('destination', function ($q) use ($request) {
                if (!empty($request->input('intake'))) {
                    $q->where('intake', $request->intake);
                }
            });
            }
      
            if(!empty($request->input('student_category')) && $request->input('student_category') == "na"){
                $query->whereNull('student_category');
            }else if (!empty($request->input('student_category'))) {
                                      
                    $query->where('student_category', $request->student_category);
            }

            

            if (!empty($request->input('followUp'))) {
                $followupValue = $request->input('followUp');
                if ($followupValue == "no_followUp") {
                    $query->whereDoesntHave('followup');
                } elseif ($followupValue == "all") {
                    $query->whereHas('followup', function ($q) {
                        $q->whereNotNull('id');
                    });
                }
                
                // $query->whereHas('followup', function ($q) use ($followupValue) {
                //     // if ($followupValue == "all") {
                //     //     $q->whereNotNull('id');
                //     // } elseif ($followupValue == "no_followUp") {
                //     //     $q->whereNull('id');
                //     // }
                // });
            }
        

            if(!empty($request->input('sarechType')) && $request->sarechType == "candidate_timeline"){

                $query->whereHas('user.timeLine', function ($q) use ($request) {
    
                    if (!empty($request->input('stages'))) {
                        $q->where('stages', $request->stages);
                    }

                    if (!empty($request->input('daterange'))) {
                        $dates = explode(' - ', $request->input('daterange'));
                        $startDate = Carbon::createFromFormat('m/d/Y', $dates[0])->startOfDay();
                        $endDate = Carbon::createFromFormat('m/d/Y', $dates[1])->endOfDay();
                        $q->whereBetween('created_at', [$startDate, $endDate]);
                    }
            
                
                });
            }

    

        if ($request->keyword && $request->keyword != null) {

            $query->whereHas('user', function ($q) use ($request) {

                $q->where('name', 'LIKE', "%$request->keyword%")
                    ->orWhere('email', 'LIKE', "%$request->keyword%")
                    ->orWhere('phone', 'LIKE', "%$request->keyword%");
            });
        }

        if ($request->sort_by == 'latest') {
            $query->latest();
        } else if ($request->sort_by == 'latestUpdate') {
            $query->latest("updated_at");
        } else if ($request->sort_by == 'oldest' ) {
            $query->oldest();
        } else if ($request->sort_by == 'oldestUpdate') {
            $query->oldest("updated_at");
        // } else if ($request->sort_by == 'last_activity_date') {  
        //     $query->whereHas('user', function ($q) use ($request) {
        //         $q->orderByDesc('last_activity_date');
        //         // $q->orderBy('last_activity_date', 'DESC');
        //         // $q->orderBy('last_activity_date', 'DESC');
        //         // $q->orderBy('last_activity_date', 'DESC');
        //         // $q->latest("last_activity_date");
        //     });    
        // } else {
        } else if ($request->sort_by == 'last_activity_date') {
            $query->orderByDesc(function ($q) {
                $q->select('last_activity_date')
                    ->from('users')
                    ->whereColumn('candidates.user_id', 'users.id')
                    ->whereNull('users.deleted_at')
                    ->orderBy('last_activity_date')
                    ->limit(1);
            });
        } else {
            $query->latest();
        }

        // if (!empty($request->input('preferred_country'))) {
        //     $query->whereHas('destination', function ($q) use ($request) {
        //         $preferredCountries = $request->input('preferred_country', []);
        //         $q->whereNotNull('preferred_country');
        //         foreach ($preferredCountries as $country) {
        //             // $q->orWhere('preferred_country', 'LIKE', "%$country%");
        //             $q->orWhere(DB::raw("FIND_IN_SET('preferred_country', $country)"));
        //         }
        //     });
        // }

        if (!empty($request->input('preferred_country'))) {
            $query->whereHas('destination', function ($q) use ($request) {
                $preferredCountries = $request->input('preferred_country', []);
                $q->whereNotNull('preferred_country');
                
                foreach ($preferredCountries as $country) {
                    $q->where(function ($innerQuery) use ($country) {
                        $innerQuery->whereRaw("FIND_IN_SET($country,preferred_country)");
                    });
                }
            });
        }

        // if (!empty($request->input('preferred_country'))) {
        //     $query->whereHas('destination', function ($q) use ($request) {
        //         $preferredCountries = $request->input('preferred_country', []);
        //         $q->whereNotNull('preferred_country');
        //         foreach ($preferredCountries as $country) {
        //             $q->orWhereRaw("FIND_IN_SET('$country','LIKE', "%$country%" preferred_country)");
        //         }
        //     });
        // }
        // $sqls = $query->toSql();
        // dd($sqls);
        $totalCandidatesCount = $query->count();
        // dd($totalCandidatesCount);
    
        if (!empty($request->input('export_button'))) {
            return $this->exportCustomerReportData($query->get());
        }
        $candidates = $query->paginate(20)->withQueryString();
        $sourcesData = Source::distinct('name')->with("source")->where("parent_id",null)->get();
        $countries = Country::all();
        $main_intake = [];
        // $main_intake = Intake::whereIn('status', [1])->pluck('name')->toArray();
        return view('admin.candidate.customerReport', compact('candidates','sourcesData','totalCandidatesCount', 'admin_list', 'countries','main_intake'));
    }

   

    

    public function state(Request $request)
    {
        $states = State::where('country_id', $request->country_id)->get();
        return response()->json($states);
    }

    public function city(Request $request)
    {
        $cities = City::where('state_id', $request->state_id)->get();
        return response()->json($cities);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        abort_if(!userCan('candidate.create'), 403);

        $data['countries'] = Country::all();
        // $data['job_roles'] = JobRole::all();
        $data['job_roles'] = [];
        // $data['professions'] = Profession::all();
        $data['experiences'] = Experience::all();
        $data['educations'] = Education::all();
        // $data['skills'] = Skill::all();
        $data['skills'] = [];
        $data['candidate_languages'] = CandidateLanguage::all(['id', 'name']);
        $data['sourcesData'] = Source::distinct('name')->with("source")->where("parent_id",null)->get();
        $data['countries'] = Countries::all('id', 'name');
        // $data['states'] = State::all('id','name');
        // $data['citys'] = City::all('id','name');

        // $data['admin_list'] = Admin::where('id', '!=', 1)
        // ->whereHas('roles', function ($query) {
        //     $query->where('name', 'Lead Manager');
        // })
        // ->get()->toArray();

        $leadManagerEnvRole = env('LEAD_MANAGER_ROLE', 'Lead Manager');

        $data['admin_list'] = Admin::where('id', '!=', 1)
            ->whereHas('roles', function ($query) use ($leadManagerEnvRole) {
                $query->where('name', $leadManagerEnvRole);
            })
            ->get()
            ->toArray();
            $data['main_intake'] = [];
        // $data['main_intake'] = Intake::whereIn('status', [1])->pluck('name')->toArray();  
        

        return view('admin.candidate.create', $data);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function userCreate($request)
    {
        // $request->validate([
        //     'name' => 'required',
        //     'email' => [
        //         'required',
        //         'email',
        //         Rule::unique('users', 'email')->where(function ($query){
        //             return $query->whereNull('deleted_at');
        //         }),
        //     ],
        // ]);


        $request->validate([
            'name' => 'required',
            'source' => 'required',
            'stages' => 'required',
            'phone' => [
                'required_without:email', 
                Rule::when(!empty(@$request->phone), ['unique:users,phone']),
                Rule::when(empty(@$request->email), ['numeric', Rule::unique('users', 'phone')->where(function ($query) {
                    return $query->whereNull('deleted_at');
                })])],
            'email' => [
                'nullable', 
                'email', 
                Rule::unique('users', 'email')->where(function ($query) {
                    return $query->whereNull('deleted_at');
                }),
            ],
        ]);


        $data['country'] = null;
        $data['country_code'] = null;
        if (!empty($request->input('country_id'))) {
            $countryData = explode('@#$?', $request->input('country_id'));
            $country = $countryData[0];
            $data['country'] = $country;
            if (!empty($country)) $data['country'] = $country;

            $code = $countryData[1];
            if (!empty($code)) $data['country_code'] = $code;
        }

        $assign_to = null;
        if(!empty($request->assign_to)){
            $assign_to = $request->assign_to;
        }

        $password = $request->password ?? Str::random(8);

        $data = User::create([
            'role' => 'candidate',
            'name' => $request->name,
            'username' => Str::slug('K' . $request->name . '122'),
            'email' => $request->email,
            'email_verified_at' => now(),
            'password' => Hash::make($password),
            'remember_token' => Str::random(10),
            'secondary_email' => $request->secondary_email,
            'alternate_phone' => $request->alternate_phone,
            'middle_name' => $request->middle_name,
            'last_name' => $request->last_name,
            'phone' => $request->phone,
            'country' => $data['country'],
            'country_code' => $data['country_code'],
            'stages' => $request->stages,
            // 'assign_to' => $assign_to,
            'source'  => $request->source

        ]);

        if(!empty($request->stages)){
            UserTimeline::create([
                'user_id' => $data->id,
                'stages' => $request->stages,
                'event' => 0,
                'comment' => "Stage Changed from " . "-NA-" . " to " . (@$request->stages ? @$request->stages : "-NA-") . ".",
                'auth_id' => Auth::user()->id,
            ]);
        }

        return [$password, $data];
    }
    public function candidateCreate($request, $data)
    {
        if (!empty($request->birth_date)) {
            $dateTime = Carbon::parse($request->birth_date);
            $date = $request['birth_date'] = $dateTime->format('Y-m-d H:i:s');
        } else {
            $date = null;
        }


        $candidate = Candidate::where('user_id', $data[1]->id)->first();

        $candidate->update([
            "role_id" => $request->role_id,
            "profession_id" => $request->profession_id,
            "experience_id" => $request->experience,
            "education_id" => $request->education,
            "gender" => $request->gender,
            "website" => $request->website,
            "bio" => $request->bio,
            "marital_status" => $request->marital_status,
            "birth_date" => $date,
            "address" => $request->address,
            "passport_number" => $request->passport_number,
            "student_category" => $request->student_category,
            // "country_id" => $request->country_id, 
            "state_id" => $request->state_id,
            "city_id" => $request->city_id,
            "notes" => $request->notes,

            
        ]);


        if(!empty($request->qua)){
       
            foreach ($request->qua as $qua) {
                $candidateEducation = CandidateEducation::create([
                    'candidate_id' => $candidate->id,
                    'qualification' => $qua['qualification'],
                    'institute_name' => $qua['institute_name'],
                    'education_board' => $qua['education_board'],
                    'passing_year' => $qua['passing_year'],
                    'grade_percentage' => $qua['grade_percentage'],
                    'medium' => $qua['medium'],
                ]);
        
                   
            }

        }


        // $candidate_education = CandidateEducation::where('candidate_id', $candidate->id)->first();

        // if ($candidate_education) {
        //     $candidate_education->update([
        //         'qualification' => $request->qualification,
        //         'institute_name' => $request->institute_name,
        //         'education_board' => $request->education_board,
        //         'passing_year' => $request->passing_year,
        //         'grade_percentage' => $request->grade_percentage,
        //     ]);
        // } else {
        //     $candidate_education = CandidateEducation::create([
        //         'candidate_id' => $candidate->id,
        //         'qualification' => $request->qualification,
        //         'institute_name' => $request->institute_name,
        //         'education_board' => $request->education_board,
        //         'passing_year' => $request->passing_year,
        //         'grade_percentage' => $request->grade_percentage,
        //     ]);
        // }


        // if(!empty($request->language_proficiency_req) == "1"){
        $candidate_exam = CandidateExam::where('candidate_id', $candidate->id)->first();
        $test_taken_dates = null;
        if(!empty($request->test_taken_date)){
           $test_taken_dates = Carbon::parse($request->test_taken_date);
        }
        if ($candidate_exam) {
            $candidate_exam->update([
                'test_name' => $request->test_name,
                'test_scores' => $request->test_scores,
                'test_taken_date' => $test_taken_dates,
                'language_proficiency_req' => $request->language_proficiency_req,
            ]);
        } else {
            $candidate_exam = CandidateExam::create([
                'candidate_id' => $candidate->id,
                'test_name' => $request->test_name,
                'test_scores' => $request->test_scores,
                'test_taken_date' => $test_taken_dates,
                'language_proficiency_req' => $request->language_proficiency_req,
            ]);
        }
        // }



        $candidate_destination = CandidateDestination::where('candidate_id', $candidate->id)->first();
        $preferred_country_ids =  NULL;
         if(!empty($request->preferred_country)){
            $preferred_country_ids = implode(",", $request->preferred_country);
        }
        if ($candidate_destination) {
            $candidate_destination->update([
                "candidate_id" => $request->candidate_id,
                "preferred_country" => $preferred_country_ids,
                "preferred_city" => $request->preferred_city,
                "preferred_state" => $request->preferred_city,
                "preferred_program" => $request->preferred_program,
                "preferred_course" => $request->preferred_course,
                "intake" => $request->intake,
            ]);
        } else {
            $candidate_destination = CandidateDestination::create([
                "candidate_id" => $candidate->id,
                "preferred_country" => $preferred_country_ids,
                "preferred_city" => $request->preferred_city,
                "preferred_state" => $request->preferred_city,
                "preferred_program" => $request->preferred_program,
                "preferred_course" => $request->preferred_course,
                "intake" => $request->intake,
            ]);
        }

        // $candidate_followup = Followup::where('user_id', $data[1]->id)->first();

        // if ($candidate_followup) {
        //     $candidate_followup->update([
        //         "user_id" => $data[1]->id,
        //         "follow_up_type" => $request->follow_up_type, 
        //         "follow_up_status" => $request->follow_up_status, 
        //         "follow_up_description" => $request->follow_up_description, 
        //         "next_follow_up_date" => $request->next_follow_up_date, 
        //         "priority" => $request->priority,
        //     ]);
        // } else {
        //     $candidate_followup = Followup::create([
        //         "user_id" => $data[1]->id,
        //         "follow_up_type" => $request->follow_up_type, 
        //         "follow_up_status" => $request->follow_up_status, 
        //         "follow_up_description" => $request->follow_up_description, 
        //         "next_follow_up_date" => $request->next_follow_up_date, 
        //         "priority" => $request->priority,
        //     ]);
        // }



        // $candidate_destination = CandidateDestination::where('candidate_id', $candidate->id)->first();

        // $candidate_destination->updateOrCreate([
        //     "candidate_id" => $request->candidate_id, 
        //     "preferred_country" => $request->preferred_country, 
        //     "preferred_city" => $request->preferred_city, 
        //     "preferred_program" => $request->preferred_program, 
        //     "preferred_course" => $request->preferred_course, 
        //     "intake" => $request->intake,

        // ]);

        // $candidate_followup = Followup::where('user_id', $data[1]->id)->first();

        // $candidate_followup->updateOrCreate([
        //     "user_id" => $request->candidate_id, 
        //     "follow_up_type" => $request->follow_up_type, 
        //     "follow_up_status" => $request->follow_up_status, 
        //     "follow_up_description" => $request->follow_up_description, 
        //     "next_follow_up_date" => $request->next_follow_up_date, 
        //     "priority" => $request->priority,

        // ]);


        // cv
        if ($request->cv) {
            $pdfPath = "/file/candidates/";
            $pdf = pdfUpload($request->cv, $pdfPath);

            $candidate->update([
                "cv" => $pdf,
            ]);
        }
      
        if ($request->image) {
            $path = 'images/candidates';
            $image = uploadImage($request->image, $path);
        } else {
            //$image = createAvatar($data[1]->name, 'uploads/images/candidate');
            $image = null;
        }

        $candidate->update(["photo" => $image]);

        // skills
        $skills = $request->skills;
        if ($skills) {
            $skillsArray = [];

            foreach ($skills as $skill) {
                $skill_exists = Skill::where('id', $skill)->orWhere('name', $skill)->first();

                if (!$skill_exists) {
                    $select_tag = Skill::create(['name' => $skill]);
                    array_push($skillsArray, $select_tag->id);
                } else {
                    array_push($skillsArray, $skill);
                }
            }

            $candidate->skills()->attach($skillsArray);
        }

        // languages
        $candidate->languages()->attach($request->languages);

        return $candidate;
    }

    // public function store(CandidateRequest $request)
    public function store(Request $request)
    
    {
        abort_if(!userCan('candidate.create'), 403);

        // $location = session()->get('location');
        // if (!$location) {

        //     $request->validate([
        //         'location' => 'required',
        //     ]);
        // }
        // dd($request->all());
        // $request->validate([
        //     'name' => 'required',
        //     'phone' => [
        //         'required_without_all:email',
        //         'unique:users,phone'
        //     ],
        //     'email' => [
        //         'nullable', // Email is not required
        //         'email', // Ensures the email is a valid email address
        //         Rule::unique('users', 'email')->where(function ($query){
        //             return $query->whereNull('deleted_at');
        //         }),
        //     ],
        //     // 'email' => [
        //     //     'required',
        //     //     'email',
        //     //     Rule::unique('users', 'email')->where(function ($query){
        //     //         return $query->whereNull('deleted_at');
        //     //     }),
        //     // ],
        // ]);

        $request->validate([
            'name' => 'required',
            'source' => 'required',
            'stages' => 'required',
            'phone' => [
                'required_without:email', // Phone is required if email is not provided
                Rule::when(!empty(@$request->phone), ['unique:users,phone']),
                Rule::when(empty(@$request->email), ['numeric', Rule::unique('users', 'phone')->where(function ($query) {
                    return $query->whereNull('deleted_at');
                })])],
            'email' => [
                'nullable', // Email is not required
                'email', // Ensures the email is a valid email address
                Rule::unique('users', 'email')->where(function ($query) {
                    return $query->whereNull('deleted_at');
                }),
            ],
        ]);

      

        try {

        if ($request->image) {
            $request->validate([
                'image' =>  'image|mimes:jpeg,png,jpg,gif'
            ]);
        }
        if ($request->cv) {
            $request->validate([
                "cv" => "mimetypes:application/pdf",
            ]);
        }
      
        $data = $this->userCreate($request);
        $candidate = $this->candidateCreate($request, $data);
        $user = $data[1];
        $password = $data[0];

        // Location
        // updateMap($candidate);

        // if mail is configured
        if (checkMailConfig()) {
            $candidate_account_auto_activation_enabled = Setting::where("candidate_account_auto_activation", 1)->count();

            // if candidate activation enabled, send account created mail
            // else, send will be activated mail.
            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));
            }
        }

        flashSuccess(__('candidate_created_successfully'));
        return redirect()->route('candidate.index');
        } catch (\Throwable $th) {
            return redirect()->back()->withInput()->with('error', config('app.debug') ? $th->getMessage() : 'Something went wrong');
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($user_id)
    {

        // abort_if(!userCan('candidate.view'), 403);
        $subcategories = DocumentSubcategory::get(['id', 'document_subcategory_name'])->toArray();
        $candidate = Candidate::with('skills', 'languages:id,name', 'profession')->findOrFail($user_id);
        $user = User::with('socialInfo', 'leads')->findOrFail($user_id);
        // $appliedJobs = $candidate->appliedJobs()->with('company.user', 'category', 'role')->get();
        $appliedJobs = [];
        // $bookmarkJobs = $candidate->bookmarkJobs()->with('company.user', 'category', 'role')->get();
        $bookmarkJobs =[];
        return view('admin.candidate.show', compact('user_id', 'candidate', 'user', 'appliedJobs', 'bookmarkJobs', 'subcategories'));
    }






    public function delete_documents(Request $request)
    {
        // $user_id=Auth::user()->id;
        // $subcategory_id=$request->subcategory_id;
        // $document=Documents::where('user_id',$user_id)
        // ->where('document_subcategory_id',$subcategory_id);
        $document_id = $request->document_id;
        $document = Documents::where('id', $document_id);
        if (isset($document)) {
            $document_path = $document->get()->toArray()[0]["document_location"];
            $path = Storage::disk('s3')->delete($document_path);
            if ($path) {
                $document->delete();
                return response()->json(['status' => 1]);
            }
        }

        return response()->json(['status' => 0]);
    }

    public function get_documents(Request $request)
    {
  
        $document_categories = DocumentCategory::with('documentSubcategory')->get(['id', 'document_category_name'])->toArray();
        $document_link = Storage::disk('s3')->url('/');
        // $user_id=Auth::user()->id;
        // $uploaded_documents=User::where('id' , $user_id)->with('documents')->get()->toArray()[0]["documents"];
        $uploaded_documents = Documents::where('user_id', $request->user_id)->get(['id', 'document_subcategory_id', 'updated_at', 'document_location', 'document_name'])->toArray();

        $initialDocumnts = DocumentSubcategory::whereIn("id",[1,2,3,5,12,10,11,37,38])->get();
       
        $document_link = Storage::disk('s3')->url('/');
 
        $data = compact(['document_categories', 'uploaded_documents', 'document_link','initialDocumnts']);

        return response()->json(['data' => $data]);
    }

    // public function get_documents_new(Request $request)
    // {
  
        
        
        
    //     $document = Documents::where('user_id',$request->user_id)->get();
    //     $document_link = Storage::disk('s3')->url('/');
       
    //     $data = compact(['document', 'document_link']);
    //     return response()->json(['data' => $data]);
    // }

    public function documents_upload(Request $request)
    { 
        
        if ($request->hasFile('file') && $request->validate(["file" => "required|mimes:pdf,doc,xlsx,csv,docx,jpeg,jpg,png|max:16000000"])) {

            // $user_id=Auth::user()->id;
            $user_id = $request->user_id;
            // $subcategory=DocumentSubcategory::find($request->document_subcategory_id)->toArray()['document_subcategory_name'];
            // $subcategory=str_replace("'"," ",$subcategory);
            // $subcategory=explode(' ', $subcategory);
            // $subcategory=implode('_', $subcategory);

            $subcategory = $request->subcategory_name;

            $file = $request->file('file');
            $target_dir = "https://gradding.s3.ap-south-1.amazonaws.com/";
            $file_type = strtolower($file->getClientOriginalExtension());

            $filename = $subcategory . "_" . time() . "." . $file_type;
            $user_dir = "candidate/documents/" . $user_id . "/";

            $document_name = str_replace("_", " ", $subcategory);

            $file_path = $user_dir . $filename;
            $path = Storage::disk('s3')->put($file_path,  fopen($file, 'r+')); //stores file

            
            if ($path) {
                $document = new Documents;
                $document->user_id = $user_id;
                ($request->document_subcategory_id != null || $request->document_subcategory_id != "") ?
                    ($document->document_subcategory_id = $request->document_subcategory_id) : ($document->document_name = $document_name);
                $document->document_location = $user_dir . $filename;
                $document->document_size = $file->getSize();
                $document->save();
                return response()->json(['document_subcategory_id' => $request->document_subcategory_id, 'status' => 1]);
            }
        }
        return response()->json(['document_subcategory_id' => $request->document_subcategory_id, 'status' => 0]);
    }


    // public function documents_upload_new(Request $request)
    // { 
       
    //     if ($request->hasFile('file') && $request->validate(["file" => "required|mimes:pdf,doc,xlsx,csv,docx,jpeg,jpg,png|max:16000000"])) {

    //         // $user_id=Auth::user()->id;
    //         $user_id = $request->user_id;
    //         // $subcategory=DocumentSubcategory::find($request->document_subcategory_id)->toArray()['document_subcategory_name'];
    //         // $subcategory=str_replace("'"," ",$subcategory);
    //         // $subcategory=explode(' ', $subcategory);
    //         // $subcategory=implode('_', $subcategory);

    //         $subcategory = $request->subcategory_name;

    //         $file = $request->file('file');
    //         $target_dir = "https://gradding.s3.ap-south-1.amazonaws.com/";
    //         $file_type = strtolower($file->getClientOriginalExtension());

    //         $filename = $subcategory . "_" . time() . "." . $file_type;
    //         $user_dir = "candidate/documents/" . $user_id . "/";

    //         $document_name = $request->document_name;

    //         $file_path = $user_dir . $filename;
    //         $path = Storage::disk('s3')->put($file_path,  fopen($file, 'r+')); //stores file


    //         if ($path) {
    //             $document = new Documents;
    //             $document->user_id = $user_id;
    //             ($request->document_subcategory_id != null || $request->document_subcategory_id != "") ?
    //                 ($document->document_subcategory_id = $request->document_subcategory_id) : ($document->document_name = $document_name);
    //             $document->document_location = $user_dir . $filename;
    //             $document->document_size = $file->getSize();
    //             $document->save();
    //             return response()->json(['document_subcategory_id' => $request->document_subcategory_id, 'status' => 1]);
    //         }
    //     }
    //     return response()->json(['document_subcategory_id' => $request->document_subcategory_id, 'status' => 0]);
    // }


    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit(Candidate $candidate)
    {
    
        abort_if(!userCan('candidate.update'), 403);
        $formattedTime = Carbon::now()->format('Y-m-d H:i:s');
         $candidateDisplay = 0;
        $roleNames = Auth()->user()->getRoleNames()->toArray();
        // if (Auth::check() && !in_array('superadmin', $roleNames)) {
        if (Auth::check()) {
            if ($candidate) {
                $formattedTime = Carbon::now(); 
        
                if ($candidate->open_auth_id && $formattedTime <= $candidate->open_date_time && $candidate->open_auth_id != Auth::user()->id) {
                    $candidateDisplay = 1;
                    // flashWarning("This Custome is already opened by another user (" . ucwords(adminIdToNameGet($candidate->open_auth_id)) . ").");
                    // return back();
                }
        
                if (!$candidate->open_auth_id || $formattedTime > $candidate->open_date_time) {
                    if(!in_array('superadmin', $roleNames)){
                        $candidate->update([
                            'open_auth_id' => Auth::user()->id,
                            'open_date_time' => $formattedTime->addMinutes(30),
                        ]);
                    }
               
                }
            } else {
                flashError("Candidate not found.");
                return back();
            }
        }
   

        $roleEnvNames = explode(',', env('AVAILABLE_LEAD_ROLES', 'Lead Manager,Operation Manager'));
        $admin_list = Admin::where('id', '!=', 1)
            ->whereHas('roles', function ($query) use ($roleEnvNames) {
                $query->whereIn('name', $roleEnvNames);
            })
            ->get()
            ->toArray();

        // $admin_list = Admin::where('id', '!=', 1)
        // ->whereHas('roles', function ($query) {
        //     $query->whereIn('name', ['Lead Manager','Operation Manager']);
        // })
        // ->get()->toArray();
        $user = User::findOrFail($candidate->user_id);
        // $contactInfo = ContactInfo::where('user_id', $user->id)->first();
        // $job_roles = JobRole::all();
        $job_roles = [];
        // $professions = Profession::all();
        $professions = [];
        $experiences = Experience::all();
        $educations = Education::all();
        // $skills = Skill::all();
        $skills = [];
        $candidate_languages = CandidateLanguage::all(['id', 'name']);
        // $candidate->load('languages:id,name', 'educations', 'destination', 'candidate_exam');
        $sourcesData = Source::distinct('name')->with("source")->where("parent_id",null)->get();
        $candidate_exams = CandidateExam::all();

        
     
        $countries = Countries::all('id', 'name');

        $preferred_countries = [];
        $other_countries = [];
        
        $jsonString = str_replace(['"', '[', ']'], '', @$candidate->destination[0]->preferred_country);
        $preferred_country_ids = explode(",", $jsonString);
        
        foreach ($preferred_country_ids as $preferred_country_id) {
            $country = $countries->firstWhere('id', $preferred_country_id);
            
            if ($country) {
                $preferred_countries[] = [
                    'id' => $country->id,
                    'name' => $country->name,
                ];
            }
        }
        
        $other_countries = $countries->reject(function ($country) use ($preferred_country_ids) {
            return in_array($country->id, $preferred_country_ids);
        })->toArray(); // Convert the collection to an array
        
        $countries = array_merge($preferred_countries, $other_countries);
        
        // dd($countries);

  

        // $jsonString = str_replace(['"', '[', ']'], '',  @$candidate->destination[0]->preferred_country);
        // $preferred_country_ids = explode(",", $jsonString);

        // $preferred_countries = [];
        // $other_countries = [];

        // foreach ($countries as $country) {
        //     if (in_array($country->id, $preferred_country_ids)) {
        //         $preferred_countries[] = [
        //             'id' => $country->id,
        //             'name' => $country->name,
        //         ];
        //     } else {
        //         $other_countries[] = [
        //             'id' => $country->id,
        //             'name' => $country->name,
        //         ];
        //     }
        // }

        // foreach ($preferred_country_ids as $index => $preferred_country_id) {
        //     $country = $countries->firstWhere('id', $preferred_country_id);
        //     if ($country) {
        //         $preferred_countries[] = [
        //             'id' => $country->id,
        //             'name' => $country->name,
        //         ];
        //     } 
        // }
        // $other_countries = $countries->finsremoveIN('id', $preferred_country_id);
        // dd($preferred_countries);

        // $countries = $preferred_countries + $other_countries;
        // $combined_array = ($preferred_countries + $other_countries);
        // $countries = json_decode(json_encode($combined_array));

   
        // $states = State::all('id','name');
        // $citys = City::all('id','name');
        $webinards= Webinars::select('id', 'webinar_name')->get();
        $followups = Followup::latest()->where('user_id', $candidate->user_id)->get();
        $ind_universities = IndianUniversity::all(['id', 'name']);
        $universities = Universities::where('status', 1)->get(['id', 'name']);
        $diploma_courses = Diploma_course::where('status',1)->get();
        $cadidate_id_web = $candidate->id;
        $candidate_web_find = InterestedCandidatesWebinar:: where('candidate_id', $cadidate_id_web )->pluck('webinar_id');  
        $main_intake = Intake::whereIn('status', [1])->pluck('name')->toArray();

        $partners = Partner::select('id', 'name')->get();
        $services = Service::select('id', 'name')->get();
        
        // $main_intake = [];
        // dd($main_intake);
        return view('admin.candidate.edit', compact(
            'countries',
            'followups',
            'candidate',
            'user',
            'experiences',
            'educations',
            'skills',
            'candidate_languages',
            'admin_list',
            'sourcesData',
            'ind_universities',
            'universities',
            'diploma_courses',
            'webinards',
            'candidateDisplay',
            'candidate_web_find',
            'main_intake',
            'partners',
            'services'
        ));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Candidate $candidate)
    {   
        
        abort_if(!userCan('candidate.update'), 403);

          //Webinar Intrested Candidate Save And Update start        
        if (!empty($request->webinar_ids) && is_array($request->webinar_ids)) {
            $webinar_ids = $request->webinar_ids;
        }
        
        $webuser = $candidate->id;
        // dd( $webuser );

        if (isset($webinar_ids) && is_array($webinar_ids)) {
            foreach ($webinar_ids as $webinar_id) {
                $findwebinar = InterestedCandidatesWebinar::where('candidate_id', $webuser)
                    ->where('webinar_id', $webinar_id)
                    ->first();
        
                if ($findwebinar) {
                    // Update the existing record if found
                    $findwebinar->update([
                        'candidate_id' => $webuser,
                        'webinar_id' => $webinar_id,
                    ]);
                } else {
                    // Create a new record if not found
                    $Interestedwebinar = new InterestedCandidatesWebinar;
                    $Interestedwebinar->candidate_id =  $webuser;
                    $Interestedwebinar->webinar_id = $webinar_id;
                    $Interestedwebinar->save();
                }
            }
        }
      //Webinar Intrested Candidate Save And Update end
   

      
   
        // $request->validate([
        //     'name' => 'required',
        //     'email' => [
        //         'required',
        //         'email',
        //         Rule::unique('users', 'email')->where(function ($query) use ($candidate) {
        //             return $query->whereNull('deleted_at');
        //         })->ignore($candidate->user_id),
        //     ],
        // ]);

        $request->validate([
            'name' => 'required',
            'source' => 'required',
            'stages' => 'required',
            'phone' => [
                'required_without:email', 
                Rule::when(!empty($request->phone), Rule::unique('users', 'phone')->where(function ($query) {
                    return $query->whereNull('deleted_at');
                })->ignore($candidate->user_id)),
                Rule::when(empty(@$request->email), ['numeric', Rule::unique('users', 'phone')->where(function ($query) {
                    return $query->whereNull('deleted_at');
                })->ignore($candidate->user_id)])],
        
            'email' => [
                'nullable', 
                'email',
                Rule::unique('users', 'email')->where(function ($query) use ($candidate) {
                    return $query->whereNull('deleted_at');
                })->ignore($candidate->user_id),
            ],
        ]);
        
        if (!empty($request->birth_date)) {
            $dateTime = Carbon::parse($request->birth_date);
            $date = $request['birth_date'] = $dateTime->format('Y-m-d H:i:s');
        } else {
            $date = null;
        }
 
  
        $user = User::FindOrFail($candidate->user_id);

        $data['country'] = null;
        $data['country_code'] = null;
        if(@$request->country_check == "0"){
          
            if (!empty($request->input('country_id'))) {
                $countryData = explode('@#$?', $request->input('country_id'));
                $country = $countryData[0];
                $data['country'] = $country;
                if (!empty($country)) $data['country'] = $country;
    
                $code = $countryData[1];
                if (!empty($code)) $data['country_code'] = $code;
            }
        }else{
            $data['country'] = $user->country;
            $data['country_code'] = $user->country_code;
        }
        //////////////////////assign_to////////////////////////////////
            // $assign_to = null;
            // if(!empty($request->assign_to)){
            //     $assign_to = $request->assign_to;
            // }else{
            //     if (is_array($request->preferred_country) && in_array('79', $request->preferred_country)) {
            //         $assign_to = 9;
            //     } elseif (is_array($request->preferred_country) && in_array('39', $request->preferred_country)) {
            //         $assign_to = 26;
            //     } else {
            //         $assign_to = $user->assign_to;
            //     }

            // }
     //////////////////////assign_to new////////////////////////////////
            // $assign_to = null;
            // if(!empty($request->assign_to)){
            //     $assign_to = $request->assign_to;
            // }
            // if (!empty($request->stages) && $request->stages == "Inquiry" && !empty($request->preferred_country)) {

            //         if (is_array($request->preferred_country) && in_array('15', $request->preferred_country)) {
            //             $assign_to = 37;   //////Assign to Palak  preferred_country is Australia /////
            //         } elseif (is_array($request->preferred_country) && in_array('39', $request->preferred_country)) {
            //             $assign_to = (rand(0, 1) == 0) ? 33 : 36; //////Assign to shahida/Kiran randem  preferred_country is canada  United Kingdom/////
            //         } elseif (is_array($request->preferred_country) && in_array('79', $request->preferred_country)) {
            //             $assign_to = 9;   //////Assign to Disha  preferred_country is United Kingdom/////
            //         } else {
            //             $assign_to = 11;  //////Assign to Neha  preferred_country any/////
            //         }

        
            // }

     //////////////////////assign_to new////////////////////////////////
         ///////////////////////////assign_to Followup ///////////////////////////////    
            // if(!empty($assign_to)  && $assign_to != $user->assign_to){

            //     // $candidate_followup = Followup::where('user_id', $candidate->user_id)
            //     // ->whereNotNull('datetime')
            //     // ->where('datetime', '>', Carbon::now())
            //     // ->get();
            //     // if(!$candidate_followup->isEmpty()){
            //     //     foreach ($candidate_followup as $followup) {
            //     //         $followup->assign_to = $assign_to;
            //     //         $followup->save();
            //     //     }
            //     // }

            //         UserTimeline::create([
            //             'user_id' => $user->id,
            //             'stages' => "Assign To",
            //             'event' => 1,
            //             'comment' => "Assignee Changed from " . (@$user->assign_to ? ucwords(adminIdToNameGet($user->assign_to))  . ' (' ."#". @$user->assign_to . ')' : '-NA-') . " to " . (@$assign_to ? ucwords(adminIdToNameGet($assign_to)). ' (' ."#". @$assign_to . ')' : '-NA-') . ".",
            //             'auth_id' => Auth::user()->id
            //         ]);
                

            //     Followup::where('user_id', $candidate->user_id)
            //     ->whereNotNull('datetime')
            //     ->where('datetime', '>', Carbon::now()) 
            //     ->update(['assign_to' => $assign_to]);

                
            
               
            // }
        ///////////////////////////assign_to///////////////////////////////    
        //////////////////////UserTimeline////////////////////////////////
            if (!empty($request->stages) && $request->stages !== $candidate->user->stages) {
    
                UserTimeline::create([
                    'user_id' => $user->id,
                    'stages' => $request->stages,
                    'event' => 0,
                    'comment' => "Stage Changed from " . (@$candidate->user->stages ? @$candidate->user->stages : "-NA-") . " to " . (@$request->stages ? @$request->stages : "-NA-") . ".",
                    'auth_id' => Auth::user()->id
                ]);

                // if($request->stages == "Application ready to submit"){
                //     $sendTo = str_replace([' ','+'],'',@$candidate->user->phone);
                //     // $sendTo=918875501432;
                //         sendRegisterWhatsapp([
                //             "template" => "ready_for_admission",
                //             "sendTo" => @$sendTo,
                //             "name" =>  @$candidate->user->name,
                //             "user_id" => @$candidate->user->id,
                //         ]);
                
                
                // }
            }

        
        //////////////////////endUserTimeline////////////////////////////////

            $new_dropped_reason = NUll;
            if($request->stages == "Student backed out / Dropped" || $request->stages == "Offer Rejected"){
                if(@$request->dropped_reason == "other"){
                    $new_dropped_reason =  @$request->dropped_reason1;
                }else{
                    $new_dropped_reason = @$request->dropped_reason;
                }
            }
            $stage_expiry_date = null;
            if($request->stages == "Offer Accepted"){
                $stage_expiry_date =  @$request->stage_expiry_date;
            }
          
        $user->update([
            'name' => $request->name,
            'email' => $request->email,
            'secondary_email' => $request->secondary_email,
            'alternate_phone' => $request->alternate_phone,
            'middle_name' => $request->middle_name,
            'last_name' => $request->last_name,
            'phone' => $request->phone,
            'country' => $data['country'],
            'country_code' => $data['country_code'],
            'stages' => $request->stages,
            // 'assign_to' => $assign_to,
            'source'  => $request->source,
            // 'webinar'=> $request->webinar,
            'partner_id'=> $request->partner_id,
            'service_id'=> $request->service_id,
            'dropped_reason'=> $new_dropped_reason,
            'stage_expiry_date'=> $stage_expiry_date,
            "lead_type" => $request->lead_type,
            'prefferd_time' => $request->prefferd_time,
            'whatsapp_marketing_status' => $request->whatsapp_marketing_status,
            
        ]);
        // dd($user);
         $c_country_id = null;
        if(@$request->country_check == "1"){
            $c_country_id = null;
        }else{
            $c_country_id = $candidate->country_id;
        }
        // $webinar_candidate =  NULL;
        // if(!empty($request->webinar_ids)){
        //     $webinar_candidate = implode(",", @$request->webinar_ids);
        // }

      
 
        $candidate->update([
        
            "role_id" => $request->role_id,
            
            'profession_id' => $request->profession,
            'experience_id' => $request->experience,
            'education_id' => $request->education,
            'gender' => $request->gender,
            'website' => $request->website,
            'bio' => $request->bio,
            "marital_status" => $request->marital_status,
            "birth_date" => $date,
            "address" => $request->address,
            "passport_number" => $request->passport_number,
            "student_category" => $request->student_category,
            "country_id" => $c_country_id, 
            "state_id" => $request->state_id,
            "city_id" => $request->city_id,
            "notes" => $request->notes,
            // "webinar_ids"=>$webinar_candidate,
            // added by r
            "budget" => $request->budget,
            "fund_source" => $request->fund_source,
            "loan_type" => $request->loan_type,
            "passport_expiry" => $request->passport_expiry ? date('Y-m-d', strtotime($request->passport_expiry)) : null,
            
            'open_auth_id' => null,
            'open_date_time' => null
           

        ]);
       

        // password change
        if ($request->password) {
            $request->validate([
                'password' => 'required',
            ]);
            $user->update([
                'password' => Hash::make($request->password),
            ]);
        }

        // image
        if ($request->image) {
            $request->validate([
                'image' =>  'image|mimes:jpeg,png,jpg,gif'
            ]);

            $old_photo = $candidate->photo;
            if (file_exists($old_photo)) {
                if ($old_photo != 'backend/image/default.png') {
                    unlink($old_photo);
                }
            }
            $path = 'images/candidates';
            $image = uploadImage($request->image, $path);

            $candidate->update([
                "photo" => $image,
            ]);
        }
        // cv
        if ($request->cv) {
            $request->validate([
                "cv" => "mimetypes:application/pdf",
            ]);
            $pdfPath = "/file/candidates/";
            $pdf = pdfUpload($request->cv, $pdfPath);

            $candidate->update([
                "cv" => $pdf,
            ]);
        }

        // Location
        // updateMap($candidate);
        if(!empty($request->qua)){
        //   dd($request->qua);
            foreach ($request->qua as $qua) {
                if (
                    !empty(@$qua['institute_name']) ||
                    !empty(@$qua['education_board1']) ||
                    !empty(@$qua['passing_year']) ||
                    !empty(@$qua['gaps']) ||
                    !empty(@$qua['backlogs']) ||
                    !empty(@$qua['year']) ||
                    !empty(@$qua['grade_percentage']) ||
                    !empty(@$qua['degree']) 
                    
                ) {
                   
                 
                    $candidateEducation = CandidateEducation::firstOrNew(['id' => @$qua['id']]);
                    $new_education_board = NULL;
                    if(@$qua['education_board'] == "other"){
                        $new_education_board =  @$qua['education_board1'];
                    }else{
                        $new_education_board = @$qua['education_board'];
                    }
                    $new_stream = NULL;
                    if(@$qua['stream'] == "other"){
                        $new_stream =  @$qua['stream1'];
                    }else{
                        $new_stream = @$qua['stream'];
                    }
                    $new_medium = NUll;
                    if(@$qua['medium'] == "other"){
                        $new_medium =  @$qua['medium1'];
                    }else{
                        $new_medium = @$qua['medium'];
                    }
                                    
                    $candidateEducation->fill([
                        'candidate_id' => $candidate->id,
                        'qualification' => @$qua['qualification'],
                        'institute_name' => @$qua['institute_name'],
                        'education_board' => $new_education_board,
                        'passing_year' => @$qua['passing_year'],
                        'gaps' => @$qua['gaps'],
                        'backlogs' => @$qua['backlogs'],
                        'year' => @$qua['year'],
                        'grade_percentage' => @$qua['grade_percentage'],
                        'grade_type' => @$qua['grade_type'],
                        'stream' => @$new_stream,
                        'degree' => @$qua['degree'],
                        'medium' => @$new_medium,
                    ]);
            
                    $candidateEducation->save();
                }
                    if(!empty($qua['image'])){
                        $image_data['user_id'] = $candidate->user_id;
                        $image_data['document_subcategory_id'] = @$qua['document_subcategory_id'];
                        $image_data['subcategory_name'] = @$qua['subcategory_name'];
                        $image_data['file'] = $qua['image'];
                        $requests = new Request($image_data);
                        $imageFilePath = $this->documents_uploads($requests);
                    }
               
            }

        }
     
        // $candidate_education = CandidateEducation::where('candidate_id', $candidate->id)->get();
        
        // if ($candidate_education) {
        //     $candidate_education->update([
        //         'qualification' => $request->qualification,
        //         'institute_name' => $request->institute_name,
        //         'education_board' => $request->education_board,
        //         'passing_year' => $request->passing_year,
        //         'grade_percentage' => $request->grade_percentage,
        //     ]);
        // } else {
        //     $candidate_education = CandidateEducation::create([
        //         'candidate_id' => $candidate->id,
        //         'qualification' => $request->qualification,
        //         'institute_name' => $request->institute_name,
        //         'education_board' => $request->education_board,
        //         'passing_year' => $request->passing_year,
        //         'grade_percentage' => $request->grade_percentage,
                
        //     ]);
        // }


        $examData = $request->input('candidate_exam');
        if ($examData) {
            foreach ($examData as $exam) {
                if (isset($exam['id'])) {
                    $examId = $exam['id'];
                    $candidateExam = CandidateExam::find($examId);

                    if (!isset($exam['test_name']) || !isset($exam['test_type']) || !isset($exam['test_scores']) || !isset($exam['test_taken_date']) || !isset($exam['test_result_date']) ) {
                        $candidateExam->delete();
                    }
                    if (!$candidateExam) {
                        continue;
                    }
                } else {
                    if (isset($exam['test_type'])) {
                    $candidateExam = new CandidateExam();
                    $candidateExam->candidate_id = $candidate->id;
                    }
                }
                if (isset($exam['test_type'])) {
                $candidateExam->test_name = $exam['test_name'] ? $exam['test_name'] : null;
                $candidateExam->test_type = $exam['test_type'] ? $exam['test_type']: null;
                $candidateExam->test_scores = $exam['test_scores'] ? $exam['test_scores']:null;
                $candidateExam->test_taken_date = $exam['test_taken_date'] ? date('Y-m-d', strtotime($exam['test_taken_date'])) : null;
                $candidateExam->test_result_date = $exam['test_result_date'] ? date('Y-m-d', strtotime($exam['test_result_date'])) : null;
                $candidateExam->save();
                }
            }
        }

        $univrsittyData=  $request->input('suggest_university');
        if ($univrsittyData) 
        {
        foreach ($univrsittyData as $univrsitty)
            {               
            // if (isset($univrsitty['id'])) {
                $univrsittyId = @$univrsitty['id'];
                $univrsitySug = UniversitySuggest::find($univrsittyId);
                if($univrsitySug){
                    $univrsitySug->uname = $univrsitty['uname'] ? $univrsitty['uname'] : null;
                    $univrsitySug->name = $univrsitty['name'] ? $univrsitty['name']: null;
                    $univrsitySug->website_url = $univrsitty['website_url'] ? $univrsitty['website_url']: null;
                    $univrsitySug->duration = $univrsitty['duration'] ? $univrsitty['duration']:null;
                    $univrsitySug->intake = $univrsitty['intake'] ? $univrsitty['intake'] : null;
                    $univrsitySug->ielts_score = $univrsitty['ielts_score'] ? $univrsitty['ielts_score']: null;
                    $univrsitySug->ielts_no_band = $univrsitty['ielts_no_band'] ? $univrsitty['ielts_no_band']:null;
                    $univrsitySug->pte_score = $univrsitty['pte_score'] ? $univrsitty['pte_score'] : null;
                    $univrsitySug->pte_no_band = $univrsitty['pte_no_band'] ? $univrsitty['pte_no_band']: null;
                    $univrsitySug->yearly_tution_fee = $univrsitty['yearly_tution_fee'] ? $univrsitty['yearly_tution_fee']:null;
                    $univrsitySug->save();
                }else{
                    $univrsitySug = new UniversitySuggest();
                    $univrsitySug->candidate_id = $candidate->id;
                    $univrsitySug->uname = $univrsitty['uname'] ? $univrsitty['uname'] : null;
                    $univrsitySug->name = $univrsitty['name'] ? $univrsitty['name']: null;
                    $univrsitySug->website_url = $univrsitty['website_url'] ? $univrsitty['website_url']: null;
                    $univrsitySug->duration = $univrsitty['duration'] ? $univrsitty['duration']:null;
                    $univrsitySug->intake = $univrsitty['intake'] ? $univrsitty['intake'] : null;
                    $univrsitySug->ielts_score = $univrsitty['ielts_score'] ? $univrsitty['ielts_score']: null;
                    $univrsitySug->ielts_no_band = $univrsitty['ielts_no_band'] ? $univrsitty['ielts_no_band']:null;
                    $univrsitySug->pte_score = $univrsitty['pte_score'] ? $univrsitty['pte_score'] : null;
                    $univrsitySug->pte_no_band = $univrsitty['pte_no_band'] ? $univrsitty['pte_no_band']: null;
                    $univrsitySug->yearly_tution_fee = $univrsitty['yearly_tution_fee'] ? $univrsitty['yearly_tution_fee']:null;
                    $univrsitySug->save();
                }
            }
        }




       
        
    
        // // old code replace
        // // if($request->language_proficiency_req === "1"){
        //     $candidate_exam = CandidateExam::where('candidate_id', $candidate->id)->first();
        //     $test_taken_dates = null;
        //         if(!empty($request->test_taken_date)){
        //            $test_taken_dates = Carbon::parse($request->test_taken_date);
        //         }
        //     if ($candidate_exam) {
        //         $candidate_exam->update([
        //             'test_name' => $request->test_name,
        //             'test_scores' => $request->test_scores,
        //             'test_taken_date' => $test_taken_dates,
        //             'language_proficiency_req' => $request->language_proficiency_req,
        //         ]);
        //     } else {
        //         $candidate_exam = CandidateExam::create([
        //             'candidate_id' => $candidate->id,
        //             'test_name' => $request->test_name,
        //             'test_scores' => $request->test_scores,
        //             'test_taken_date' =>  $test_taken_dates,
        //             'language_proficiency_req' => $request->language_proficiency_req,
        //         ]);
        //     }
        // // }

        $candidate_destination = CandidateDestination::where('candidate_id', $candidate->id)->first();
        $preferred_country_ids =  NULL;
        $intake_names =  NULL;
        if(!empty($request->preferred_country)){
           $preferred_country_ids = implode(",", $request->preferred_country);
        }
        if(!empty($request->intake)){
           $intake_names = implode(",", $request->intake);
        }
        if ($candidate_destination) {
            $candidate_destination->update([
                "preferred_country" => $preferred_country_ids,
                "preferred_city" => $request->preferred_city,
                "preferred_state" => $request->preferred_city,
                "preferred_program" => $request->preferred_program,
                "preferred_course" => $request->preferred_course,
                "applied_university_name" => @$request->applied_university_name,
                "consultant_name" => @$request->consultant_name,
                "intake" => $intake_names,
            ]);
        } else {
            $candidate_destination = CandidateDestination::create([
                "candidate_id" => $candidate->id,
                "preferred_country" => $preferred_country_ids,
                "preferred_city" => $request->preferred_city,
                "preferred_state" => $request->preferred_city,
                "preferred_program" => $request->preferred_program,
                "preferred_course" => $request->preferred_course,
                "applied_university_name" => @$request->applied_university_name,
                "consultant_name" => @$request->consultant_name,
                "intake" => $intake_names,
            ]);
        }

        // $candidate_followup = Followup::where('user_id', $candidate->user_id)->first();

        // if ($candidate_followup) {
        //     $candidate_followup->update([
        //         "user_id" => $candidate->user_id, 
        //         "follow_up_type" => $request->follow_up_type, 
        //         "follow_up_status" => $request->follow_up_status, 
        //         "follow_up_description" => $request->follow_up_description, 
        //         "next_follow_up_date" => $request->next_follow_up_date, 
        //         "priority" => $request->priority,
        //     ]);
        // } else {
        //     $candidate_followup = Followup::create([
        //         "user_id" => $candidate->user_id, 
        //         "follow_up_type" => $request->follow_up_type, 
        //         "follow_up_status" => $request->follow_up_status, 
        //         "follow_up_description" => $request->follow_up_description, 
        //         "next_follow_up_date" => $request->next_follow_up_date, 
        //         "priority" => $request->priority,
        //     ]);
        // }


        // skills
        $skills = $request->skills;
        DB::table('candidate_skill')->where('candidate_id', $candidate->id)->delete();

        if ($skills) {
            $skillsArray = [];

            foreach ($skills as $skill) {
                $skill_exists = SkillTranslation::where('skill_id', $skill)->orWhere('name', $skill)->first();

                if (!$skill_exists) {
                    $select_tag = Skill::create(['name' => $skill]);

                    $languages = Language::all();
                    foreach ($languages as $language) {
                        $select_tag->translateOrNew($language->code)->name = $skill;
                    }
                    $select_tag->save();

                    array_push($skillsArray, $select_tag->id);
                } else {
                    array_push($skillsArray, $skill_exists->id);
                }
            }

            $candidate->skills()->attach($skillsArray);
        }

        // languages
        $candidate->languages()->sync($request->languages);

        if ($request->password) {
            // make Notification /
            $data[] = $user;
            $data[] = $request->password;
            $data[] = 'Candidate';

            checkMailConfig() ? Notification::route('mail', $user->email)->notify(new UpdateCompanyPassNotification($data)) : '';
        }

        if (@$request->save_close_button == 'save_close_button') {
            flashSuccess(__('candidate_updated_successfully'));
            return redirect()->route('candidate.index');
        }

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

    // public function update_new(Request $request){
        
    //     if($request->type == "personal_info"){
    //         $request->validate([
    //             'name' => 'required',
    //             'phone' => [
    //                 'required_without:email', 
    //                 Rule::when(!empty($request->phone), Rule::unique('users', 'phone')->where(function ($query) {
    //                     return $query->whereNull('deleted_at');
    //                 })->ignore($request->user_id)),
    //                 Rule::when(empty(@$request->email), ['numeric', Rule::unique('users', 'phone')->where(function ($query) {
    //                     return $query->whereNull('deleted_at');
    //                 })->ignore($request->user_id)])],
            
    //             'email' => [
    //                 'nullable', 
    //                 'email',
    //                 Rule::unique('users', 'email')->where(function ($query) use ($request) {
    //                     return $query->whereNull('deleted_at');
    //                 })->ignore($request->user_id),
    //             ],
    //         ]);
            
    //         if (!empty($request->birth_date)) {
    //             $dateTime = Carbon::parse($request->birth_date);
    //             $birth_date = $request['birth_date'] = $dateTime->format('Y-m-d H:i:s');
    //         } else {
    //             $birth_date = null;
    //         }

    //         if (!empty($request->passport_expiry)) {
    //             $dateTime = Carbon::parse($request->passport_expiry);
    //             $passport_expiry = $request['birth_date'] = $dateTime->format('Y-m-d H:i:s');
    //         } else {
    //             $passport_expiry = null;
    //         }
     
      
    //         $user = User::FindOrFail($request->user_id);
    //         $user_save_data = [
    //             'name' => $request->name,
    //             'phone' => $request->phone,
    //             'alternate_phone' => $request->alternate_phone,
    //             'secondary_email' => $request->secondary_email,
                
    //             'name' => $request->name,
    //         ];

    //         $candidate_save_data = [
    //             'birth_date' => $birth_date,
    //             'passport_number' => $request->passport_number,
    //             'passport_expiry' => $passport_expiry,
    //             'gender' => $request->gender,
    //             'state_id' => $request->state_id,
    //             'city_id' => $request->city_id,
    //             'country_id' => $request->country_id,
    //             'visa_refusal' => $request->visa_refusal,
    //         ];

    //         $user_status = User::where('id',$user->id)->update($user_save_data);
    //         $candidate_status = Candidate::where('user_id',$request->user_id)->update($candidate_save_data);
    //         if($user_status == 1 && $candidate_status == 1){
    //             return response()->json(['status'=>1,'message' => "Information Successfully Updated"]);
    //         }else{
    //             return response()->json(['status'=>1,'message' => "Please Try Again Something Wrong Detail Not Save"]); 
    //         }
            
    //     }
    //     elseif($request->type == "education_detail"){
    //         if($request->doc_id == "null"){
    //             if ($request->education_board == "10th" || $request->education_board == "12th") {
    //                 $request->education_board = $request->education_board;
    //                 if($request->education_board == "other"){
    //                     $request->education_board = $request->board_other;
    //                 }
    //             }
    //             elseif ($request->education_board == "Bachelors" || $request->education_board == "Masters" || $request->education_board == "Diploma") {
    //                 $request->education_board = $request->uni_board;
    //                 if($request->uni_board == "other"){
    //                     $request->education_board = $request->uni_other;
    //                 }
    //             }
                
    //             $candidate = Candidate::where('user_id',$request->user_id)->first();
                
    //             $data = CandidateEducation::where('candidate_id',$candidate->id)->where('qualification',$request->qualification)->first();
               
    //             if($data == null){
    //                 $education_data = [
    //                     'qualification' => $request->qualification,
    //                     'education_board' => $request->education_board,
    //                     'year' => $request->admission_year,
    //                     'passing_year' => $request->passing_year,
    //                     'institute_name' => $request->institute_name,
    //                     'grade_percentage' => $request->grade_percentage,
    //                     'medium' => $request->medium,
    //                     'backlogs' => $request->backlog,
    //                     'gaps' => $request->gap,
    //                     'candidate_id' => $candidate->id,
    //                     'grade_type' => $request->grade_type,
    //                 ];
    //                 $data = CandidateEducation::insert($education_data);
    //                 if($data == 1){
    //                     return response()->json(['status'=>1,'message' => "Education Detail Successfully Save"]);
    //                 }else{
    //                     return response()->json(['status'=>0,'message' => "Please Try Again Something Wrong Detail Not Save"]);  
    //                 }
    //             }else{
    //                 return response()->json(['status'=>2,'message' => "Already Document Exist Please Select another type Detail qualification / update Detail"]);  
    //             }
                
    //         }else{
                
    //             if ($request->qualification == "10th" || $request->qualification == "12th") {
    //                 $request->education_board = $request->education_board;
    //                 if($request->education_board == "other"){
    //                     $request->education_board = $request->board_other;
    //                 }
    //             }
    //             elseif ($request->qualification == "Bachelors" || $request->qualification == "Masters" || $request->qualification == "Diploma") {
    //                 $request->education_board = $request->uni_board;
    //                 if($request->uni_board == "other"){
    //                     $request->education_board = $request->uni_other;
    //                 }
    //             }
                
    //             $candidate = Candidate::where('user_id',$request->user_id)->first();
    //             $data = CandidateEducation::whereNotIn('id', [$request->doc_id])->where('candidate_id',$candidate->id)->where('qualification',$request->qualification)->first();
    //             if($data == null){
    //                 $education_data = [
    //                     'qualification' => $request->qualification,
    //                     'education_board' => $request->education_board,
    //                     'year' => $request->admission_year,
    //                     'passing_year' => $request->passing_year,
    //                     'institute_name' => $request->institute_name,
    //                     'grade_percentage' => $request->grade_percentage,
    //                     'medium' => $request->medium,
    //                     'backlogs' => $request->backlog,
    //                     'gaps' => $request->gap,
    //                     'candidate_id' => $candidate->id,
    //                     'grade_type' => $request->grade_type,
        
    //                 ];
    //                 $data = CandidateEducation::where('id',$request->doc_id)->update($education_data);
    //                 if($data == 1){
    //                     return response()->json(['status'=>1,'message' => "Education Detail Successfully Updated"]);
    //                 }else{
    //                     return response()->json(['status'=>0,'message' => "Please Try Again Something Wrong Detail Not Update"]);  
    //                 }
    //             }else{
    //                 return response()->json(['status'=>2,'message' => "Already Detail Exist Please Select another type qualification / update detail"]);  
    //             }
    //         }
            
    //     }

    //     dd($request);
    // }
    // public function education_detail_delete(Request $request){
    //     $data = CandidateEducation::where('id', $request->doc_delete_id)->delete();
    //     if($data == 1){
    //         return response()->json(['status'=>1,'message' => "Education Detail Successfully Deleted"]);
    //     }else{
    //         return response()->json(['status'=>0,'message' => "Please Try Again Something Wrong Detail Not Delete"]);  
    //     }
    // }

    // public function check_qualification_year(Request $request){
    //     $down_to_up = ['10th','12th','Diploma','Bachelors','Masters'];
    //     $up_to_down = ['Masters','Bachelors ','Diploma','12th','10th'];
    //     $type = $request->type;
    //     $candidate = Candidate::where('user_id',$request->user_id)->first();
    //     $max = 2024;
    //     $min = 1980;
    //     if($request->qualification == "10th"){
    //         $data = CandidateEducation::where('candidate_id',$candidate->id)->get();
    //         $year = 0;
    //         $flag = 0;
    //         foreach($down_to_up as $down_to_up_use){
    //             $year++;
    //             if($down_to_up_use == "10th"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $down_to_up_use){
    //                             $max = $data_use->year-1;
    //                             break; 
    //                         }
    //                     }
    //                 }
    //             }
                
    //         }
            
    //     }
    //     else if($request->qualification == "12th"){
    //         $data = CandidateEducation::where('candidate_id',$candidate->id)->get();
    //         $year = 0;
    //         $flag = 0;
    //         foreach($down_to_up as $down_to_up_use){
    //             $year++;
    //             if($down_to_up_use == "12th"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $down_to_up_use){
    //                             $max = $data_use->year-1;
                               
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
    //         }

    //         $flag = 0;
    //         foreach($up_to_down as $up_to_down_use){
    //             $year++;
    //             if($up_to_down_use == "12th"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $up_to_down_use){
    //                             $min = $data_use->year+1;
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
                
    //         }
    //     }
    //     else if($request->qualification == "Diploma"){
    //         $data = CandidateEducation::where('candidate_id',$candidate->id)->get();
    //         $year = 0;
    //         $flag = 0;
    //         foreach($down_to_up as $down_to_up_use){
    //             $year++;
    //             if($down_to_up_use == "Diploma"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $down_to_up_use){
    //                             $max = $data_use->year-1;
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
    //         }

    //         $flag = 0;
    //         foreach($up_to_down as $up_to_down_use){
    //             $year++;
    //             if($up_to_down_use == "Diploma"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $up_to_down_use){
    //                             $min = $data_use->year+1;
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
                
    //         }
    //     }
    //     else if($request->qualification == "Bachelors"){
    //         $data = CandidateEducation::where('candidate_id',$candidate->id)->get();
    //         $year = 0;
    //         $flag = 0;
    //         foreach($down_to_up as $down_to_up_use){
    //             $year++;
    //             if($down_to_up_use == "Bachelors"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $down_to_up_use){
    //                             $max = $data_use->year-1;
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
                
    //         }

    //         $flag = 0;
    //         foreach($up_to_down as $up_to_down_use){
    //             $year++;
    //             if($up_to_down_use == "Bachelors"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $up_to_down_use){
    //                             $min = $data_use->year+1;
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
                
    //         }
    //     }
    //     else if($request->qualification == "Masters"){
    //         $data = CandidateEducation::where('candidate_id',$candidate->id)->get();
    //         $year = 0;
    //         $flag = 0;
    //         foreach($down_to_up as $down_to_up_use){
    //             $year++;
    //             if($down_to_up_use == "Masters"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $down_to_up_use){
    //                             $max = $data_use->year-1;
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
                
    //         }

    //         $flag = 0;
    //         foreach($up_to_down as $up_to_down_use){
    //             $year++;
    //             if($up_to_down_use == "Masters"){
    //                 $flag = 1;
    //             }else{
    //                 if($flag == 1){
    //                     foreach($data as $data_use){
    //                         if($data_use->qualification == $up_to_down_use){
    //                             $min = $data_use->year+1;
    //                             break;
    //                         }
    //                     }
    //                 }
    //             }
                
                
    //         }
    //     }
        
    //     $data = 1;
    //     if($data == 1){
    //         return response()->json(['status'=>1,'message' => "Education Detail Successfully Deleted",'max'=>$max , 'min' => $min]);
    //     }else{
    //         return response()->json(['status'=>0,'message' => "Please Try Again Something Wrong Detail Not Delete",'max'=>$max , 'min' => $min]);  
    //     }
    // }
    

    // public function education_document_get(Request $request){
    //     if($request->doc_id == "null"){
    //         $candidate = Candidate::where('user_id',$request->user_id)->first();
    //         $education_data = CandidateEducation::where('candidate_id',$candidate->id)->get();
    //         return $education_data;
    //     }else{
    //         $education_data = CandidateEducation::where('id',$request->doc_id)->first();
    //         return $education_data;
    //     }
       
        
    // }

    public function documents_uploads(Request $request)
    {   
        if ($request->file && $request->validate(["file" => "required|mimes:pdf,doc,xlsx,csv,docx,jpeg,jpg,png|max:16000000"])) {

            // $user_id=Auth::user()->id;
            $user_id = $request->user_id;
            // $subcategory=DocumentSubcategory::find($request->document_subcategory_id)->toArray()['document_subcategory_name'];
            // $subcategory=str_replace("'"," ",$subcategory);
            // $subcategory=explode(' ', $subcategory);
            // $subcategory=implode('_', $subcategory);

            $subcategory = $request->subcategory_name;

            $file = $request->file;
            $target_dir = "https://gradding.s3.ap-south-1.amazonaws.com/";
            $file_type = strtolower($file->getClientOriginalExtension());

            $filename = $subcategory . "_" . time() . "." . $file_type;
            $user_dir = "candidate/documents/" . $user_id . "/";

            $document_name = str_replace("_", " ", $subcategory);

            $file_path = $user_dir . $filename;
            $path = Storage::disk('s3')->put($file_path,  fopen($file, 'r+')); //stores file


            if ($path) {
                $document = new Documents;
                $document->user_id = $user_id;
                ($request->document_subcategory_id != null || $request->document_subcategory_id != "") ?
                    ($document->document_subcategory_id = $request->document_subcategory_id) : ($document->document_name = $document_name);
                $document->document_location = $user_dir . $filename;
                $document->document_size = $file->getSize();
                $document->save();
                return true;
            }
        }
        return false;
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Candidate $candidate)
    {
        abort_if(!userCan('candidate.delete'), 403);

        $user = User::FindOrFail($candidate->user_id);
        $user->delete();

        if (file_exists($candidate->cv)) {
            unlink($candidate->cv);
        }

        if (file_exists($candidate->photo)) {
            if ($candidate->photo != 'backend/image/default.png') {
                unlink($candidate->photo);
            }
        }
        $candidate->delete();

        flashSuccess(__('candidate_deleted_successfully'));
        return redirect()->back();
    }

    
    public function multipleDestroy(Request $request)
    {
        abort_if(!userCan('candidate.delete'), 403);

        $users = User::whereIn('id', $request->ids)->get();

        foreach ($users as $user) {
            $user->delete();
        }

        $candidates = Candidate::whereIn('user_id', $request->ids)->get();

        foreach ($candidates as $candidate) {

            if (file_exists($candidate->cv)) {
                unlink($candidate->cv);
            }
    
            if (file_exists($candidate->photo)) {
                if ($candidate->photo != 'backend/image/default.png') {
                    unlink($candidate->photo);
                }
            }
            $candidate->delete();
        }

        

        flashSuccess(__('candidate_deleted_successfully'));

        return true;
    }

    public function statusChange(Request $request)
    {
        $user = User::findOrFail($request->id);
        $user->status = $request->status;
        $user->save();


        if ($request->status == 1) {
            return responseSuccess(__('candidate_activated_successfully'));
        } else {
            return responseSuccess(__('candidate_deactivated_successfully'));
        }
    }

    public function verificationChange(Request $request)
    {
        $user = User::findOrFail($request->id);

        if ($request->status) {
            $user->update(['email_verified_at' => now()]);
            $message = __('email_verified_successfully');
        } else {
            $user->update(['email_verified_at' => null]);
            $message = __('email_unverified_successfully');
        }

        return responseSuccess($message);
    }

    public function checkfollowupsDatetime(Request $request)
    {
        $admin_id = $request->admin_id;
        if(empty($admin_id)){
            $admin_id = Auth::user()->id;
        }

       $checkfollowups = Followup::where('assign_to', $admin_id)->whereNotNull('user_id')->get();

        if($checkfollowups && !empty($request->datetime)){
            foreach ($checkfollowups as $checkfollowup) {
               
                if($checkfollowup->datetime){
                  
                    if (Carbon::parse($request->datetime) == $checkfollowup->datetime) {
                        return response()->json(['status'=>1]);
                    }
                }
               
            }
        }
        return response()->json(['status'=>0]);

    }
    public function storeFollowup(Request $request, $id)
    {

      Followup::where('user_id', $id)->update(['close_status' => 1]);
    //    $checkfollowups = Followup::where('user_id', $id)->get();

      
    //     if($checkfollowups && !empty($request->datetime)){
    //         foreach ($checkfollowups as $checkfollowup) {
               
    //             if($checkfollowup->datetime){
                  
    //                 if (Carbon::parse($request->datetime) == $checkfollowup->datetime) {
    //                     // flashError("This slot already book");
    //                     // return redirect()->back();
    //                     return redirect()->back()->withInput()->with('error','This slot already book');
    //                     dd("This slot already book");
    //                 }
    //             }
               
    //         }
    //     }
        $comment = null;
        if($request->follow_up_status == "Connected"){
            $comment = $request->comment_connected;
            if($request->comment_connected == "Other"){
                $comment = $request->comment;
            }
        }elseif($request->follow_up_status == "Not Connected"){
            $comment = $request->comment_not_connected;
            if($request->comment_not_connected == "Other"){
                $comment = $request->comment;
            }
        }
     
        $followup = new Followup();

        $followup_up = @$request->followup_up;
        if($request->followup_up == "close"){
            $followup_up = "close";
            $followup->close_status = "1";
        }

        $followup->user_id = $id;
        $followup->comment = $comment;
        $followup->type = $request->type;
        $followup->follow_up_status = $request->follow_up_status;
        $followup->priority = $request->priority;
        $followup->followup_up = $followup_up;
        
        $new_assign_to = Auth::user()->id;
        if (!empty($request->assign_to)) {
            $new_assign_to = $request->assign_to;
        }

        $followup->assign_to = $new_assign_to;

        if (!empty($request->datetime)) {
            if($followup_up != "close" && $followup_up  != "no"){
                $followup->followup_up = "yes";
                $followup->datetime = Carbon::parse($request->datetime);
            }
           
        }
        $followup->admin_id = Auth::user()->id;
        $followup->save();

        // $latestFollowups = Followup::where('user_id', $id)
        // ->latest('created_at') 
        // ->limit(3)
        // ->get();
        // $numberOfLatestFollowups = $latestFollowups->count();
      
        // $allNotConnected = $latestFollowups->every(function ($followup) {
        //     return $followup->follow_up_status == 'Not Connected';
        // });
        
        // if ($allNotConnected && $numberOfLatestFollowups == 3) {
        //     $data = User::FindOrFail($request->id);
              
        //         if($data){
        //               $sendTo = str_replace([' ','+'],'',$data->phone);
        //             // $sendTo=918875501432;
        //             sendRegisterWhatsapp([
        //                 "template" => "no_contact",
        //                 "sendTo" => $sendTo,
        //                 "name" =>  "$data->name",
        //                 "user_id" => "$data->id",
        //             ]);
        //         }
       
            
        // } 

        if ($request->ajax()) {
            return response()->json(['status'=>1]);
        }
        flashSuccess(__('follow_up_created_successfully'));
        return back();
    }


    // public function updateFollowup(Request $request, $id)
    // {
    //   dd($request->all());
    //     $jsonData = [
    //         'to_user' => $request->input('follow_up_to_user'),
    //         'to_comment' => $request->input('follow_up_to_comment'),
    //         'from_user' => $request->input('follow_up_from_user'),
    //         'from_comment' => $request->input('follow_up_from_comment')
    //     ];


    //     $followup = Followup::where('id', $id);
    //     $followup->comment = $request->comment;
    //     $followup->type = $request->type;
    //     $followup->follow_up_status = $request->follow_up_status;
    //     $followup->priority = $request->priority;
    //     $followup->followup_up = $request->followup_up;
    //     $followup->assign_status = $request->assign_status;
    //     if($request->assign_status == "yes"){
    //         $followup->assign_to = json_encode($jsonData);
    //     }
    //     if(!empty($request->datetime)){
    //         $followup->datetime = Carbon::parse($request->datetime);
    //     }
    //     if(empty($followup->admin_id)){
    //         $followup->admin_id = Auth::user()->id;
    //     }

    //     $followup->save();

    //     flashSuccess(__('follow_up_created_successfully'));
    //     return back();
    // }

    public function univercityAdd(Request $request, $id)/////////////////////////////////////////////////////////////////////////
    {
        // dd($request->all());

      $univrsittyData=  $request->input('universities');
      if ($univrsittyData) 
      {
      foreach ($univrsittyData as $univrsitty)
          {    
            
            $univrsittyId = @$univrsitty['id'];
            $univrsitySug = UniversitySuggest::find($univrsittyId);
           
              if($univrsitySug){
               
                    $univrsitySug->uname = $univrsitty['uname'] ? $univrsitty['uname'] : null;
                    $univrsitySug->name = $univrsitty['name'] ? $univrsitty['name']: null;
                    $univrsitySug->website_url = $univrsitty['website_url'] ? $univrsitty['website_url']: null;
                    $univrsitySug->duration = $univrsitty['duration'] ? $univrsitty['duration']:null;
                    $univrsitySug->intake = $univrsitty['intake'] ? $univrsitty['intake'] : null;
                    $univrsitySug->ielts_score = $univrsitty['ielts_score'] ? $univrsitty['ielts_score']: null;
                    $univrsitySug->ielts_no_band = $univrsitty['ielts_no_band'] ? $univrsitty['ielts_no_band']:null;
                    $univrsitySug->pte_score = $univrsitty['pte_score'] ? $univrsitty['pte_score'] : null;
                    $univrsitySug->pte_no_band = $univrsitty['pte_no_band'] ? $univrsitty['pte_no_band']: null;
                    $univrsitySug->yearly_tution_fee = $univrsitty['yearly_tution_fee'] ? $univrsitty['yearly_tution_fee']:null;
                    $univrsitySug->save();

              }else{
             
                $count = UniversitySuggest::where('candidate_id','=',$id)->count();
                if($count <= 4)
                {
                
                  $univrsitySug = new UniversitySuggest();
                  $univrsitySug->candidate_id = $id;
                  $univrsitySug->uname = $univrsitty['uname'] ;
                  $univrsitySug->name = $univrsitty['name'] ;
                  $univrsitySug->website_url = $univrsitty['website_url'];
                  $univrsitySug->duration = $univrsitty['duration'] ;
                  $univrsitySug->intake = $univrsitty['intake'] ;
                  $univrsitySug->ielts_score = $univrsitty['ielts_score'] ;
                  $univrsitySug->ielts_no_band = $univrsitty['ielts_no_band'] ;
                  $univrsitySug->pte_score = $univrsitty['pte_score'] ;
                  $univrsitySug->pte_no_band = $univrsitty['pte_no_band'] ;
                  $univrsitySug->yearly_tution_fee = $univrsitty['yearly_tution_fee'];
                  $univrsitySug->save();
                }
            }
           
          }
          return response()->json(['success' => true]);
      }   
    return response()->json(['error' => 'Not created'], 500);  
    }

     //Whatsap  send code
     public function whatsappunivercity(Request $request, $id)
    {
        // return PDF::loadView('admin.candidate.whatsappuniversities1')->stream('download.pdf');
        $universityData = $request->all();
        if ($universityData) {           
        $data = $universityData['suggest_university'];   
        foreach ($data as &$unidata) {
            $universityId = @$unidata['uname'];
            if ($universityId) {
                $university = University::find($universityId, ['name']);

                if ($university) {
                    $unidata['uname'] = $university->name;
                }
            }
        }
       
        $universities['universities'] = $universityData['suggest_university'];
        $test = new Request();
        $test->merge($universities);
        // dd($test);
        $test =  $this->univercityAdd($test, $id);
        $phone = $universityData['phone'];
        $username = $universityData['username'];
        $pdf = PDF::loadView('admin.candidate.whatsappuniversities',['data' => $data]);   
        $pdfPath = 'whatsapp-pdf/pdf' . now()->format('YmdHis') . '.pdf'; 
        Storage::disk('public')->put( $pdfPath ,  $pdf->output());  
            
        // $phone=918875501432;
            $sendTo = str_replace([' ','+'],'',$phone);
            sendRegisterWhatsapp([
                "template" => 'send_university_suggestion',
                "sendTo" => $sendTo,
                "name" => $username,
                "pdf" =>$pdfPath
            ]);
        // Storage::disk('public')->delete($pdfPath);
       

            return response()->json(['success' => true]);
        }
        else{
            
        }
        return response()->json(['error' =>  'Not send']);
    }


    // delete univercity suggetion
    public function suggestedunivercityDelete(Request $request)
    {

      $univrsittyData=  $request->input('id');
     
      if ($univrsittyData) 
      {          
            // $univrsittyData = @$univrsittyData['id'];
            $univrsitySug = UniversitySuggest::find($univrsittyData);
            // dd($univrsitySug);

            if ($univrsitySug) {
                $univrsitySug->delete();
                return response()->json(['message' => 'University suggetion deleted successfully']);
            } else {
                return response()->json(['error' => 'University not found'], 404);
            }

      }
          return response()->json(['success' => true]);
      }

    public function getFollowup(Request $request)
    {
   
        abort_if(!userCan('followup.view'), 403);

        $searchName = $request->input('searchName');
        $comment = $request->input('comment');
        $type = $request->input('type');
        $datetimeD = $request->input('datetimeD');
        $daterange = $request->input('daterange');

        $endDateF = Carbon::now()->endOfDay()->format('Y-m-d H:i:s');

        $statusFollowup = $request->input('statusFollowup');
        $priority = $request->input('priority');
        $closeStatus = $request->input('closeStatus');
        // $admin_created_by = Auth::user()->id;
        $admin_created_by = null;
        if(!empty($request->input('created_by')) && $request->input('created_by') != "NULL" && $request->input('created_by') != "NUll"){
            $admin_created_by = $request->input('created_by');
        }
        $assign_to = NULL;

        if(!empty($request->input('assign_to'))){
            $assign_to = $request->input('assign_to');
        }

        $latestFollowups = Followup::select('user_id', DB::raw('MAX(created_at) as latest_created_at'))
        ->groupBy('user_id');

        $query = Followup::select('followups.*')
        ->with('user', 'candidate')
        ->whereHas('user', function ($query) {
            $query->whereNull('deleted_at');
        });
 
        if($searchName || $comment || $type || $datetimeD || $daterange || $statusFollowup || $priority || $closeStatus || $admin_created_by || $assign_to){
            if ($statusFollowup) {
                if ($statusFollowup == "Not Connected") {
                    $query->where('follow_up_status', $statusFollowup);
                }
                if ($statusFollowup == "Connected") {
                    $query->where('follow_up_status', $statusFollowup);
                }
            }
            if(userCan('admin.assign')){
                $assign_to = NULL;
            }else{
                $assign_to = Auth::user()->id;
            }
            if(!empty($request->input('assign_to'))){
                $assign_to = $request->input('assign_to');
            }
      
            if ($comment) {
                $query->where('comment', 'like', '%' . $comment . '%');
            }
            if ($type) {
                $query->where('type', $type);
            }

            if ($closeStatus != null) {
                $query->where('close_status', $closeStatus);
            }
            
            if ($daterange) {
                $dates = explode(' - ', $daterange);
                $startDate = Carbon::createFromFormat('m/d/Y', $dates[0])->startOfDay()->format('Y-m-d H:i:s');
                $endDate = Carbon::createFromFormat('m/d/Y', $dates[1])->endOfDay()->format('Y-m-d H:i:s');
        
                $query->whereBetween('created_at', [$startDate, $endDate]);
            }
        
            if ($datetimeD) {
                $dates = explode(' - ', $datetimeD);
                $startDate = Carbon::createFromFormat('m/d/Y', $dates[0])->startOfDay()->format('Y-m-d H:i:s');
                $endDate = Carbon::createFromFormat('m/d/Y', $dates[1])->endOfDay()->format('Y-m-d H:i:s');
        
                $query->whereBetween('datetime', [$startDate, $endDate]);
            }else{
                $endDate = Carbon::now()->endOfDay()->format('Y-m-d H:i:s');
                $startDate = Carbon::now()->startOfDay()->format('Y-m-d H:i:s');
                $query->where('datetime', '<=',$endDate)->where('close_status', 0);
                // $query->whereBetween('datetime', [$startDate, $endDate]);
            }

            if ($priority) {
                $query->Where('priority', 'like', '%' . $priority . '%');
            }

            if ($searchName) {
                $query->whereHas('user', function ($userQuery) use ($searchName) {
                    $userQuery->where('name', 'like', '%' . $searchName . '%');
                });
            }

            if ($searchName) {
                $query->whereHas('user', function ($userQuery) use ($searchName) {
                    $userQuery->where('name', 'like', '%' . $searchName . '%');
                });
            }

            if (!empty($admin_created_by) && $admin_created_by != "NULL") {
            
                $query->where('admin_id', $admin_created_by);
                
            }
            if ($assign_to) {
                // dd($request->input('assign_to'));
                $query->where('assign_to', $assign_to);
                
            }
        }else{
            $endDate = Carbon::now()->endOfDay()->format('Y-m-d H:i:s');
            $startDate = Carbon::now()->startOfDay()->format('Y-m-d H:i:s');
            $query->where('datetime', '<=',$endDate)->where('close_status', 0);
            if(userCan('admin.assign')){
                $assign_to = NULL;
            }else{
                $assign_to = Auth::user()->id;
            }
            if ($assign_to) {
                // dd($request->input('assign_to'));
                $query->where('assign_to', $assign_to);
                
            }
           
        }

        $queres =  $query->get();

        if (!empty($request->input('leadButton')) && $request->input('leadButton') == "1") {
            $query->whereHas('user', function ($q) {
                $q->whereIn('stages', ['Inquiry','Counselling','Documents Received','Document pending','University to be suggested','Universities suggested']);
             
          });
        }

        if (!empty($request->input('applicationButton')) && $request->input('applicationButton') == "1") {
            $query->whereHas('user', function ($q) {
                $q->whereIn('stages', ['Application ready to submit', 'Application submitted','Application Rejected','Application resubmitted','Admission Letter Pending']);
             
          });
        }
        if (!empty($request->input('offerButton')) && $request->input('offerButton') == "1") {
            $query->whereHas('user', function ($q) {
                $q->whereIn('stages', ['Offer Issued','Offer Accepted','Offer Rejected']);
             
          });
        }

        if (!empty($request->input('feePaymentButton')) && $request->input('feePaymentButton') == "1") {
            $query->whereHas('user', function ($q) {
                $q->whereIn('stages', ['Initial Fee / Tuition Fee Deposit']);
             
          });
        }

        if (!empty($request->input('droppedButton')) && $request->input('droppedButton') == "1") {
            $query->whereHas('user', function ($q) {
                $q->whereIn('stages', ['Student backed out / Dropped']);
             
          });
        }

        if (!empty($request->input('visaButton')) && $request->input('visaButton') == "1") {
            $query->whereHas('user', function ($q) {
                $q->whereIn('stages', ['Visa Rejected','Visa Accepted','Visa In Process','Work Visa']);
             
          });
        }

        $followups = $query->latest('datetime')->paginate(15)->appends($request->query());
        $count = $followups->total();


        // $permission = "followup.view";
        // $admin_list = Admin::whereHas('roles.permissions', function ($query) use ($permission) {
        //     $query->where('name', $permission);
        // })->get();
       
        $leadManagerEnvRole = env('LEAD_MANAGER_ROLE', 'Lead Manager');
        $roleEnvNames = explode(',', env('AVAILABLE_LEAD_ROLES', 'Lead Manager,Operation Manager'));
        $admin_list_assign = Admin::where('id', '!=', 1)
        ->whereHas('roles', function ($query) use ($roleEnvNames) {
            $query->whereIn('name', $roleEnvNames);
        })
        ->get()
        ->toArray();

        $admin_list = Admin::where('id', '!=', 1)
            ->whereHas('roles', function ($query) use ($roleEnvNames) {
                $query->whereIn('name', $roleEnvNames);
            })
            ->get();

            $roleNames = Auth()->user()->getRoleNames()->toArray();
         
            // $query = Followup::where('datetime', '<=', $endDateF)
            // ->where('close_status', 0)
            // ->where(function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
            //     if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
            //         $query->where('assign_to', $request->input('assign_to'));
            //     } else {
            //         if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
            //             $query->where('assign_to', Auth::user()->id);
            //         }
            //     }
            // })->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
            //         if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
            //             $q->where('assign_to', $request->input('assign_to'));
            //         } else {
            //             if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
            //                 $q->where('assign_to', Auth::user()->id);
            //             }
            //         }
            // })->get();

            // if ($assign_to) {
            //     // dd($request->input('assign_to'));
            //     $query->where('assign_to', $assign_to);
                
            // }

            $followupDataButton = Followup::where('datetime', '<=', $endDateF)
            ->where('close_status', 0)
            ->where(function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $query->where('assign_to', $request->input('assign_to'));
                } else {
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $query->where('assign_to', Auth::user()->id);
                    }
                }
            })->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
                    // if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    //     $q->where('assign_to', $request->input('assign_to'));
                    // } else {
                    //     if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                    //         $q->where('assign_to', Auth::user()->id);
                    //     }
                    // }
            })->get();
            // $sqlss = $followupDataButton->toSql();
            // dd($sqlss);
            $myNonfollowedcount = 0;
            $leadButtonCount = 0;
            $applicationButtonCount = 0;
            $offerButtonCount = 0;
            $feePaymentButtonCount = 0;
            $droppedButtonCount = 0;
            $visaButtonCount = 0;

        
            $leadButtonCount = $followupDataButton->whereIn('user.stages', ['Inquiry','Counselling','Documents Received','Document pending','University to be suggested','Universities suggested'])->count();

            $applicationButtonCount = $followupDataButton->whereIn('user.stages', ['Application ready to submit', 'Application submitted','Application Rejected','Application resubmitted','Admission Letter Pending'])->count();

            $offerButtonCount = $followupDataButton->whereIn('user.stages', ['Offer Issued','Offer Accepted','Offer Rejected'])->count();

            $droppedButtonCount = $followupDataButton->whereIn('user.stages', ['Student backed out / Dropped'])->count();

            $feePaymentButtonCount = $followupDataButton->whereIn('user.stages', ['Initial Fee / Tuition Fee Deposit'])->count();

            $visaButtonCount = $followupDataButton->whereIn('user.stages', ['Visa Rejected','Visa Accepted','Visa In Process','Work Visa'])->count();

            
           
            $pendingFollowUpCount = Followup::where('datetime', '<=', $endDateF)
            ->where('close_status', 0)
            ->where(function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $query->where('assign_to', $request->input('assign_to'));
                } else {
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $query->where('assign_to', Auth::user()->id);
                    }
                }
            })->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
                // if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                //     $q->where('assign_to', $request->input('assign_to'));
                // } else {
                //     if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                //         $q->where('assign_to', Auth::user()->id);
                //     }
                // }
            })->count();


            $querys = Candidate::with(['user' => function ($q){
                $q->whereNull('deleted_at'); 
            }],'followup');

            //    $myNonfollowedcount =  $querys->whereDoesntHave('followup')->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
            //     if(!empty($request->input('assign_to')) && $request->input('assign_to') != "na"){
            //         $q->where('assign_to', $request->input('assign_to'));
            //     }else{
            //         // $q->where('assign_to', Auth::user()->id);    
            //         if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
            //             $q->where('assign_to', Auth::user()->id);
            //         }    
            //     }
            // })->count();
            
            $myNonfollowedcount = $querys->whereDoesntHave('followup', function ($query) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $query->where('admin_id', $request->input('assign_to'));
                } else {
                    // If Auth::user()->id is set and the user has the leadManagerEnvRole
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $query->where('admin_id', Auth::user()->id);
                    }
                }
            })
            ->whereHas('user', function ($q) use ($request, $roleNames, $leadManagerEnvRole) {
                if (!empty($request->input('assign_to')) && $request->input('assign_to') != "na") {
                    $q->where('assign_to', $request->input('assign_to'));
                } else {
                    // If Auth::user()->id is set and the user has the leadManagerEnvRole
                    if (Auth::user()->id && in_array($leadManagerEnvRole, $roleNames)) {
                        $q->where('assign_to', Auth::user()->id);
                    }
                }
            })->count();

          
        return view('admin.candidate.followup', compact('followups', 'count','admin_list','admin_list_assign','pendingFollowUpCount',
        'leadButtonCount','applicationButtonCount','offerButtonCount','feePaymentButtonCount','visaButtonCount','droppedButtonCount','leadManagerEnvRole','roleEnvNames','roleNames','myNonfollowedcount'));
    }



    public function pushNotification()
    {
        $currentTime = Carbon::now();
        // $fiveMinutesBefore = $currentTime->subMinutes(5)->toDateTimeString();
        $fiveMinutesLater = $currentTime->addMinutes(5)->toDateTimeString();

        $followups = Followup::with('user')
            ->where('admin_id', Auth::id())
            ->whereDate('datetime', '<=', Carbon::today()->toDateString())
            ->where('datetime', '<=', $fiveMinutesLater)
            ->where('notification_status', '!=', 1)
            ->select('*', DB::raw("DATE_FORMAT(datetime, '%d-%b %h:%i %p') as formatted_datetime"))
            ->latest()
            ->get();

        $data = [];
        foreach ($followups as $followup) {
            // $bodyContent = $followup->user->name . "<br>" . $formattedDateTime;
            // $followupTime = Carbon::parse($followup->datetime);
            // $timeDifference = $currentTime->diffInMinutes($followupTime);
            // if ($timeDifference <= 5) {
            array_push($data, $followup);
            $updateStatus = Followup::find($followup->id);
            $updateStatus->notification_status = 1;
            $updateStatus->save();
            // }
        }
        return $data;
    }


    public function storeCustomerNotes(Request $request)
    {
        // abort_if(!userCan('candidate.view'), 403);
        $candidate = Candidate::FindOrFail($request->id);
        $candidate->update([
            'notes' => $request->notes,

        ]);
      
        if ($candidate) {
            return response()->json(['status' => 1]);
        }
        return response()->json(['status' => 0]);
    }

    // public function assignToChange(Request $request)
    // {
    //     abort_if(!userCan('admin.assign'), 403);
    //     $data = User::FindOrFail($request->id);
    //     if(!empty($request->assign_to)  && $request->assign_to != @$data->assign_to){
    //         if(@$data->id){
    //            Followup::where('user_id', $data->id)
    //            ->whereNotNull('datetime')
    //            ->where('datetime', '>', Carbon::now()) 
    //            ->update(['assign_to' => $request->assign_to]);
    //         }
             
           
              
    //     }
    //     $data->update([
    //         'assign_to' => $request->assign_to,

    //     ]);
  
        
    //     if ($data) {
    //         $datas['id'] = $data->id;
    //         $datas['name'] = ucwords(adminIdToNameGet($data->assign_to));
    //         return response()->json(['status' => 1, 'data' => $datas]);
    //     }
    //     return response()->json(['status' => 0]);
    // }

    public function assignToChange(Request $request)
    {
        // dd($request->all());
        abort_if(!userCan('admin.assign'), 403);
        $now_date = Carbon::now(); 
        $data = User::FindOrFail($request->id);
        if($request->type != "RM"){
            if($data){
                if (!empty($request->assign_to)) {
        
                    UserTimeline::create([
                        'user_id' => $data->id,
                        'stages' => "Assign To",
                        'event' => 1,
                        'comment' => "Assignee Changed from " . (@$data->assign_to ? ucwords(adminIdToNameGet($data->assign_to))  . ' (' ."#". @$data->assign_to . ')' : '-NA-') . " to " . (@$request->assign_to ? ucwords(adminIdToNameGet($request->assign_to)). ' (' ."#". @$request->assign_to . ')' : '-NA-') . ".",
                        'auth_id' => Auth::user()->id
                    ]);
                }
            }
    
            if(!empty($request->assign_to)  && $request->assign_to != @$data->assign_to){
                if(@$data->id){
                   Followup::where('user_id', $data->id)
                   ->whereNotNull('datetime')
                   ->where('datetime', '>', Carbon::now()) 
                   ->update(['assign_to' => $request->assign_to]);
                }
            }
            $data->update([
                'assign_to' => $request->assign_to,
                'assign_date' => $now_date,
            ]);
      
            
            if ($data) {
    
                // $sendTo = str_replace([' ','+'],'',$data->phone);
                // // $sendTo=918875501432;
                // sendRegisterWhatsapp([
                //     "template" => "counseller_assigned",
                //     "sendTo" => $sendTo,
                //     "name" =>  "$data->name",
                //     "user_id" => "$data->id",
                //     'assign_to' => ucwords(adminIdToNameGet($data->assign_to)),
                // ]);
               
                $admin = Admin::find($data->assign_to);
    
                if ($admin) {
                    $admin->notify(new AssignToChangeNotification($admin, $data));
                }
    
                $datas['id'] = $data->id;
                $datas['name'] = ucwords(adminIdToNameGet($data->assign_to));
                return response()->json(['status' => 1, 'data' => $datas]);
            }
        }else{ // For RM change

            if($data){
                if (!empty($request->assign_to)) {
        
                    UserTimeline::create([
                        'user_id' => $data->id,
                        'stages' => "Assign To",
                        'event' => 1,
                        'comment' => "RM Changed from " . (@$data->assigned_rm ? ucwords(adminIdToNameGet($data->assigned_rm))  . ' (' ."#". @$data->assigned_rm . ')' : '-NA-') . " to " . (@$request->assign_to ? ucwords(adminIdToNameGet($request->assign_to)). ' (' ."#". @$request->assign_to . ')' : '-NA-') . ".",
                        'auth_id' => Auth::user()->id
                    ]);
                }
            }

            $data->update([
                'assigned_rm' => $request->assign_to
            ]);
            $datas['id'] = $data->id;
            $datas['name'] = ucwords(adminIdToNameGet($data->assigned_rm));
            return response()->json(['status' => 1, 'data' => $datas]);
        }
       
        return response()->json(['status' => 0]);
    }

    public function passwordUpdate(Request $request, $id){

        abort_if(!userCan('candidate.passwordUpdate'), 403);

        if(@$request->type == "ajax"){

            try {

                $password= Str::random(8, 'alnum') . '@#';
                $user = User::where('id' , $id)->first();
                if($user){
                    $user->password = Hash::make($password);
                    $user->save();
                    $oldUser = $user;
                    $oldUser['password'] = $password;
                    $data = array('data'=>$oldUser);
                    Mail::send('mails.welcome-mail', $data, function($message) use($user) {
                        $message->to($user->email, 'Gradding')->subject
                        ('Welcome to Gradding');
                        $message->from('contact@gradding.com','Gradding Team');
                    });
                    flashSuccess(__('password_email_send_successfully'));
                    return response()->json(['success' => true]);
                }
    
                return response()->json(['success' => false, 'message' => 'Something Went Wrong'], 404);
            } catch (\Exception $e) {
                return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
            }

        }
        try {

            $password= Str::random(8, 'alnum') . '@#';
            $user=User::where('id' , $id)->first();
            if($user){
                $user->password = Hash::make($password);
                $user->save();
                $oldUser = $user;
                $oldUser['password'] = $password;
                $data = array('data'=>$oldUser);
                Mail::send('mails.welcome-mail', $data, function($message) use($user) {
                    $message->to($user->email, 'Gradding')->subject
                    ('Welcome to Gradding');
                    $message->from('contact@gradding.com','Gradding Team');
                });
                flashSuccess(__('password_email_send_successfully'));
                return redirect()->route('candidate.index');
            }
          flashError(__('something_went_wrong'));
          return redirect()->route('candidate.index');
        } catch (\Throwable $th) {
            return redirect()->back()->withInput()->with('error', config('app.debug') ? $th->getMessage() : 'Something went wrong');
        }

    }

    
    public function welcomeEmail(Request $request, $id){

        abort_if(!userCan('candidate.sendEmail'), 403);

        if(@$request->type == "ajax"){

            try {

                $user = User::where('id' , $id)->first();
                if($user){
                    $data = array('data'=>$user);
                    Mail::send('mails.costomer-welcome-mail', $data, function($message) use($user) {
                        $message->to($user->email, 'Gradding')->subject
                        ('Welcome to Gradding');
                        $message->from('contact@gradding.com','Gradding Team');
                    });
                      
                    flashSuccess(__('email_send_successfully'));
                    return response()->json(['success' => true]);
                }
    
                return response()->json(['success' => false, 'message' => 'Something Went Wrong'], 404);
            } catch (\Exception $e) {
                return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
            }

        }
        try {
            $user=User::where('id' , $id)->first();
            if($user){
                $data = array('data'=>$user);
                Mail::send('mails.costomer-welcome-mail', $data, function($message) use($user) {
                    $message->to($user->email, 'Gradding')->subject
                    ('Welcome to Gradding');
                    $message->from('contact@gradding.com','Gradding Team');
                });
                  
                flashSuccess(__('email_send_successfully'));
                return redirect()->route('candidate.index');
            }
          flashError(__('something_went_wrong'));
          return redirect()->route('candidate.index');
        } catch (\Throwable $th) {
            return redirect()->back()->withInput()->with('error', config('app.debug') ? $th->getMessage() : 'Something went wrong');
        }

    }


    public function callBackEmail(Request $request, $id){

        // dd($request->all());
        abort_if(!userCan('candidate.sendEmail'), 403);
        if(@$request->type == "ajax"){

            try {

                $user = User::where('id' , $id)->first();
                if($user){
                    $data = array('data'=>$user);
                    Mail::send('mails.call-back-mail', $data, function($message) use($user) {
                        $message->to($user->email, 'Gradding')->subject
                        ('Call Back');
                        $message->from('contact@gradding.com','Gradding Team');
                    });
                      
                    flashSuccess(__('email_send_successfully'));
                    return response()->json(['success' => true]);
                }
    
                return response()->json(['success' => false, 'message' => 'Something Went Wrong'], 404);
            } catch (\Exception $e) {
                return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
            }

        }
        try {
            $user=User::where('id' , $id)->first();
            if($user){
                $data = array('data'=>$user);
                Mail::send('mails.call-back-mail', $data, function($message) use($user) {
                    $message->to($user->email, 'Gradding')->subject
                    ('Call Back');
                    $message->from('contact@gradding.com','Gradding Team');
                });
                  
                flashSuccess(__('email_send_successfully'));
                return redirect()->route('candidate.index');
            }
          flashError(__('something_went_wrong'));
          return redirect()->route('candidate.index');
        } catch (\Throwable $th) {
            return redirect()->back()->withInput()->with('error', config('app.debug') ? $th->getMessage() : 'Something went wrong');
        }

    }

    public function customEmail(Request $request, $id){
//    dd( $request->all());
        abort_if(!userCan('candidate.sendEmail'), 403);
        try {

            $user = User::where('id' , $id)->first();
            if($user){
               
                // if($request->type == 'welcomeEmail'){
                //     $data = array('data'=>$user);
                //     Mail::send('mails.costomer-welcome-mail', $data, function($message) use($user) {
                //         $message->to($user->email, 'Gradding')->subject
                //         ('Welcome to Gradding');
                //         $message->from('contact@gradding.com','Gradding Team');
                //     });
                      
                //     return response()->json(['success' => true]);
                //  }

                 if($request->type == 'callBackEmail'){
                    $data = array('data'=>$user);
                    Mail::send('mails.call-back-mail', $data, function($message) use($user) {
                        $message->to($user->email, 'Gradding')->subject
                        ('Call Back');
                        $message->from('contact@gradding.com','Gradding Team');
                    });
                      
                    return response()->json(['success' => true]);
                 }elseif($request->type == 'enquiryEmail' || $request->type == 'offerLetter'){
                    $subject = $request->input('subject');
                    $message = $request->input('message');
                    $user['subject'] =  $subject;
                    $user['message'] =  $message;
                    $data = array('data'=>$user);
                   
                    Mail::send('mails.custom-email', $data, function($message) use($user) {
                        $message->to($user->email)->subject
                        ($user->subject);
                        $message->from('contact@gradding.com','Gradding Team');
                    });
                      
                    return response()->json(['success' => true]);

                }elseif($request->type == 'universityCourseSuggestionsEmail' || $request->type == 'customContactInformation') {
                    $subject = $request->input('subject');
                    $message = $request->input('message');
                    $customFiles = $request->file('customFile'); // Get the uploaded file
                    $user['subject'] =  $subject;
                    $user['message'] =  $message;
                    $data = array('data'=>$user);
                   
                    if ($customFiles) {
                        // Initialize an array to store the attachments
                        $attachments = [];
                    
                        foreach ($customFiles as $customFile) {
                            // Get the original filename and store it in a variable
                            $filename = $customFile->getClientOriginalName();
                    
                            // Attach the file to the email
                            $attachments[] = [
                                'data' => $customFile->get(),
                                'name' => $filename,
                                'options' => [
                                    'mime' => $customFile->getClientMimeType(),
                                ],
                            ];
                        }
                
                        // Send the email with multiple files attached
                        Mail::send('mails.custom-email', $data, function ($message) use ($user, $attachments) {
                            $message->to($user->email)
                                ->subject($user->subject)
                                ->from('contact@gradding.com', 'Gradding Team');
                    
                            // Attach the files to the email
                            foreach ($attachments as $attachment) {
                                $message->attachData(
                                    $attachment['data'],
                                    $attachment['name'],
                                    $attachment['options']
                                );
                            }
                        });
                        return response()->json(['success' => true]);
                    } else {

                        Mail::send('mails.custom-email', $data, function($message) use($user) {
                            $message->to($user->email)->subject
                            ($user->subject);
                            $message->from('contact@gradding.com','Gradding Team');
                        });
                          
                        return response()->json(['success' => true]);

                    }

                 }elseif($request->type == 'customEmail') {
                    $subject = $request->input('subject');
                    $message = $request->input('message');
                    $customFiles = $request->file('customFile'); // Get the uploaded file
                    $user['subject'] =  $subject;
                    $user['message'] =  $message;
                    $data = array('data'=>$user);
                
                    // Check if a file was uploaded
                    if ($customFiles) {
                        // Initialize an array to store the attachments
                        $attachments = [];
                    
                        foreach ($customFiles as $customFile) {
                            // Get the original filename and store it in a variable
                            $filename = $customFile->getClientOriginalName();
                    
                            // Attach the file to the email
                            $attachments[] = [
                                'data' => $customFile->get(),
                                'name' => $filename,
                                'options' => [
                                    'mime' => $customFile->getClientMimeType(),
                                ],
                            ];
                        }
                    
                        // Send the email with multiple files attached
                        Mail::send('mails.custom-email', $data, function ($message) use ($user, $attachments) {
                            $message->to($user->email)
                                ->subject($user->subject)
                                ->from('contact@gradding.com', 'Gradding Team');
                    
                            // Attach the files to the email
                            foreach ($attachments as $attachment) {
                                $message->attachData(
                                    $attachment['data'],
                                    $attachment['name'],
                                    $attachment['options']
                                );
                            }
                        });
                        return response()->json(['success' => true]);
                    } else {
                       
                        Mail::send('mails.custom-email', $data, function($message) use($user) {
                            $message->to($user->email)->subject
                            ($user->subject);
                            $message->from('contact@gradding.com','Gradding Team');
                        });
                          
                        return response()->json(['success' => true]);
                    }
                
                    return response()->json(['success' => true]);
                }
                    
                 return response()->json(['error' => 'An error occurred while sending the email.'], 500);
            }

        
            return response()->json(['error' => 'An error occurred while sending the email.'], 500);
        } catch (\Exception $e) {
            // Handle any exceptions (errors) that occurred during email sending
            return response()->json(['error' => 'An error occurred while sending the email.'], 500);
        }

    }


    public function customWhatsApp(Request $request, $id){
        // dd($request->all());
        abort_if(!userCan('candidate.sendWhatsApp'), 403);
        try {


            if($id){
                if($request->templates_type == "onboarding_link"){

                    $encrypted = Crypt::encryptString($request->id);
                    sendRegisterWhatsapp([
                        "template" => 'profile',
                        "user_id" => "$request->id",
                        "name" =>  "$request->name",
                        "sendTo" => $request->phone,
                        "message" => 'this is a testing message from graading',
                        "link" => 'auth/reg_login/'.$encrypted,
                    ]);
    
                    return response()->json(['success' => true]);

                }else{
                    sendRegisterWhatsapp([
                        "template" => $request->input('templates_type', 'custom'),
                        "sendTo" => $request->phone,
                        "name" =>  "$request->name",
                        "user_id" => "$request->id",
                        "message" => $request->message
                    ]);
    
                    return response()->json(['success' => true]);
                }
         
                 
            }
            return response()->json(['error' => 'An error occurred while sending the WhatsApp.'], 500);
        } catch (\Exception $e) {
        
            return response()->json(['error' => 'An error occurred while sending the WhatsApp.'], 500);
        }

    }

    public function closeCandidateOpen(Request $request, $id)
    {
        abort_if(!userCan('candidate.update'), 403);
        
        try {
            $candidate = Candidate::find($id);

            if ($candidate) {
                $candidate->update([
                    'open_auth_id' => null,
                    'open_date_time' => null,
                ]);

                // flashSuccess("Customer Close successfully");

                // // Return a JSON response to indicate success
                return response()->json(['success' => true]);
            }

            return response()->json(['success' => false, 'message' => 'Customer not found.'], 404);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
        }
    }


    


    public function multipleRestore(Request $request)
    {
        abort_if(!userCan('candidate.restore'), 403);
        $ids = $request->input('ids');
    
        if (!is_array($ids)) {
            $ids = [$ids];
        }
    
        $restoredItems = [];
        $errors = [];

        foreach ($ids as $id) {
            $user = User::onlyTrashed()->find($id);
            $candidate = Candidate::onlyTrashed()->where('user_id', $id)->first();
            if ($user) {
                $validator = Validator::make($user->toArray(), [
                    'name' => 'required',
                    'email' => [
                        'required',
                        'email',
                        Rule::unique('users', 'email')->where(function ($query) use ($user) {
                            return $query->whereNull('deleted_at');
                        })->ignore($user->id),
                    ],
                ]);
    
                if ($validator->fails()) {
                    $errors[] = $validator->errors();
                } else {
                    $user->restore();
                    $candidate->restore();
                    $restoredItems[] = $user;
                }
            }
        }
    
        // $candidates = Candidate::onlyTrashed()->whereIn('user_id', $ids)->get();
    
        // foreach ($candidates as $candidate) {
        //     $candidate->restore();
        // }
    
        if (empty($errors)) {
            // flashSuccess(__('candidate_restore_successfully'));
            return response()->json(['success' => true]);
        } else {
            return response()->json(['success' => false, 'message' => 'Restoration failed', 'errors' => $errors]);
        }
    }
    // public function multipleRestore(Request $request)
    // {
       
    //     abort_if(!userCan('candidate.restore'), 403);
    //     $ids = $request->input('ids');

    //     if (!is_array($ids)) {
    //         $ids = [$ids];
    //     }
      

    //     $users = User::onlyTrashed()->whereIn('id', $ids)->get();

        
    //     foreach ($users as $user) {


    //     $validator = Validator::make($user, [
    //         'name' => 'required',
    //         'email' => [
    //             'required',
    //             'email',
    //             Rule::unique('users', 'email')->where(function ($query) use ($user) {
    //                 return $query->whereNull('deleted_at');
    //             })->ignore($user->id),
    //         ],
    //     ]);
    
    //     if ($validator->fails()) {
    //         // Handle validation errors
    //         return redirect()->back()->withErrors($validator)->withInput();
    //     }
          
    //         $user->validate([
    //             'name' => 'required',
    //             'email' => [
    //                 'required',
    //                 'email',
    //                 Rule::unique('users', 'email')->where(function ($query) use ($user) {
    //                     return $query->whereNull('deleted_at');
    //                 })->ignore($user->id),
    //             ],
    //         ]);
    //         // $user->restore();
    //     }

    //     $candidates = Candidate::onlyTrashed()->whereIn('user_id', $request->ids)->get();

    //     foreach ($candidates as $candidate) {
        
    //         // $candidate->restore();
    //     }

        

    //     flashSuccess(__('candidate_restore_successfully'));

    //     return true;
    // }



    public function courseFilter(Request $request)
    {
       
        // abort_if(!userCan('candidate.view'), 403);
        $countryId = $request->country_id;
        $courses = [];
        $totalCount = 0;
        if(count($request->all()) > 0){
            $query =  Course::Select("*")->with("university");
            // dd($request->all());
            if($request->country_id && $request->country_id != ''){
                $query =  $query->whereHas('university', function ($query) use ($countryId) {
                    $query->where('country_id', $countryId);
                });
            }
    
            if($request->level && $request->level != ''){
                $query =  $query->where("course_level",$request->level);
            }
            // twelth_score
            if($request->twelth_score && $request->twelth_score != ''){
                $query =  $query->where("twelth_score","<=",$request->twelth_score)
                ->where("twelth_scoreType","percentage");
            }
    
            if($request->tenth_score && $request->tenth_score != ''){
                $query =  $query->where("tenth_score","<=",$request->tenth_score)
                ->where("tenth_scoreType","percentage");
            }
    
            if($request->minWorkEx && $request->minWorkEx != ''){
                $query =  $query->where("minWorkEx","<=",$request->minWorkEx);
            }
    
            if($request->graduation_score && $request->graduation_score != ''){
                $query =  $query->where("graduation_score","<=",$request->graduation_score)
                ->where("graduation_scoreType","percentage");
            }
    
            if($request->postGraduation_score && $request->postGraduation_score != ''){
                $query =  $query->where("postGraduation_score","<=",$request->postGraduation_score)
                ->where("postGraduation_scoreType","percentage");
            }

            if($request->duration && $request->duration != ''){
                $query =  $query->where("durationValue","=",$request->duration)
                ->where("durationUnit","years");
            }
            // SELECT * FROM `courses` c
            // INNER JOIN universities u on c.`university_id` = u.id 
            // LEFT JOIN Ex
            // where u.country_id = 79
    
            // dd($request->all());
    
            // dd($query->toSql()); die;
            // dd($query->get());
            $totalCount = $query->count();
            $courses = $query->paginate(20)->withQueryString();
            // 
        }



        $countries = Country::all();
        return view('admin.candidate.courseFilter', compact('countries','courses','totalCount'));
    }

    public function exportCustomerReport(Request $request)
    {
        abort_if(!userCan('export.candidateReport'), 403);
        try {
            // Generate a unique filename with a timestamp
            $timestamp = now()->format('YmdHis');
            // $fileName = 'customerReport_' . $timestamp . '.xlsx';
            $fileName = 'customerReport.xlsx';
            // Generate the Excel file using CustomerReportExport
            $export = new CustomerReportExport($request);
            Excel::store($export, 'export/' . $fileName, 'public');

            $message = "Export Customer Report Successfully!";

            $timestamp = now()->format('YmdHis');
            $fileName = 'users_' . $timestamp . '.xls';
    
            // Download the Excel file using UsersExport
            // return Excel::download(new CustomerReportExport($request), $fileName);

            return response()->json([
                'message' => $message,
                'url' => asset('admin/download?url=export/' . $fileName),
            ]);
        } catch (\Exception $e) {
            // Handle any exceptions that occur during the export process
            return response()->json([
                'error' => 'An error occurred while exporting the report: ' . $e->getMessage(),
            ], 500); // You can customize the error response code and message
        }
    }

    public function exportCustomerReportData($data)
    {
        // create a new CSV file
        $csv = Writer::createFromFileObject(new \SplTempFileObject());
    
        // add the header row
        $csv->insertOne([
            'Id', 'Name', 'Email', 'Secondary Email', 'Phone', 'Alternate Phone',
            'Source', 'Stages', 'Dropped_reason', 'Assign To', 'Student Category',
            'State', 'City', 'Preferred Course', 'Preferred Program', 'Intake',
            'Prefferd Countries', 'Last Comment', 'Created Date'
        ]);
        // add the data rows
        foreach ($data->toArray() as $user) {
            // dd($user);
            $preferredCountryNames = [];
            if (!empty($user['destination'][0]['preferred_country'])) {
                $jsonString = str_replace(['"', '[', ']'], '', $user['destination'][0]['preferred_country']);
                $preferred_country_ids = explode(",", $jsonString);
                foreach ($preferred_country_ids as $preferred_country_id) {
                    $preferredCountryName = countriesIdToNameGet($preferred_country_id);
                    $preferredCountryNames[] = $preferredCountryName;
                }
            }
            $countryNames = "--";
            if (!empty($preferredCountryNames)) {
                $countryNames = implode(', ', $preferredCountryNames);
            }
    
            $assign_to_name = "--";
            if (!empty(@$user['user']['assign_to'])) {
                $assign_to_name = ucwords(adminIdToNameGet($user['user']['assign_to']));
            }
            $csv->insertOne([
                $user['user']['id'],
                @$user['user']['name'],
                @$user['user']['email'],
                @$user['user']['secondary_email'],
                @$user['user']['phone'],
                @$user['user']['alternate_phone'],
                @$user['user']['source'],
                @$user['user']['stages'],
                @$user['user']['dropped_reason'],
                @$assign_to_name,
                @$user['student_category'],
                @$user['state_id'],
                @$user['city_id'],
                @$user['destination'][0]['preferred_course'],
                @$user['destination'][0]['preferred_program'],
                @$user['destination'][0]['intake'],
                @$countryNames,
                @$user['followup'][0]['comment'],
                @$user['created_at']
            ]);
           
            
            
        }
       
            // output the CSV file to the browser
            //  $csv->output('users.csv', 'w');
        return response($csv->output('users.csv', 'w'))
        ->header('Content-Type', 'text/csv')
        ->header('Content-Disposition', 'attachment; filename="users.csv"');
    }
    
    

//////////////////////////////////////agent Assigned Candidate///////////////////////////////////////////

    public function agentAssignedCandidate(Request $request, $id)
    {
        abort_if(!userCan('candidate.update'), 403);
        $now_date = Carbon::now(); 
        try {
            $candidate = Candidate::find($id);

            if (@$candidate->destination[0]->preferred_country) {

                $jsonString = str_replace(['"', '[', ']'], '',  @$candidate->destination[0]->preferred_country);
                $preferred_country_ids = explode(",", $jsonString);

                $assignTo = getAssignIdByCountry($preferred_country_ids[0]);
                $candidate->user->update([
                    'assign_to' => $assignTo,
                    'assign_date' => $now_date,
                   
                ]);

                return response()->json(['success' => true, 'message' => 'Agent assigned successfully!']);

            }

            return response()->json(['success' => false, 'message' => 'Preferred Country not found.']);
        } catch (\Exception $e) {
            return response()->json(['success' => false, 'message' => $e->getMessage()], 500);
        }
    }

    
    public function studentCase(Request $request)
    {
        return view('admin.candidate.studentCase.studentCase');

    }
    

    
}

