<?php

namespace App\Http\Controllers\Admin;

use Carbon\Carbon;
use Faker\Factory;
use App\Models\User;
use App\Models\Company;
use App\Models\TeamSize;
use Illuminate\Support\Str;
use App\Models\IndustryType;
use Illuminate\Http\Request;
use App\Models\OrganizationType;
use App\Http\Controllers\Controller;
use Modules\Location\Entities\Country;
use Illuminate\Support\Facades\Notification;
use App\Http\Requests\UniversityCreateFormRequest;
use App\Http\Requests\UniversityUpdateFormRequest;
use App\Models\Job;
use App\Models\Setting;
use App\Notifications\CompanyCreateApprovalPendingNotification;
use App\Notifications\CompanyCreatedNotification;
use App\Notifications\UpdateCompanyPassNotification;
use App\Models\Universities;
use App\Models\University;
use App\Models\Countries;
use App\Models\City;
use App\Models\State;

use Illuminate\Support\Facades\Storage;

class UniversityController extends Controller
{
    public function index(Request $request)
    {
        abort_if(!userCan('university.view'), 403);
        
        $querys = Universities::query();
        if ($request->keyword && $request->keyword != null) {

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

        // countries_type
        if ($request->countries_type && $request->countries_type != null) {
            $querys->where('country_id', $request->countries_type);
        }

        $universities =  $querys->paginate(10);

        $query = Company::query();

        // sortby
        if ($request->sort_by == 'latest' || $request->sort_by == null) {
            $query->latest();
        } else {
            $query->oldest();
        }

        // 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');
                });
            }
        }

     

        // organization_type
        if ($request->organization_type && $request->organization_type != null) {
            $query->whereHas('organization', function ($q) use ($request) {
                $q->where('slug', $request->organization_type);
            });
        }

        // organization_type
        if ($request->industry_type && $request->industry_type != null) {
            $query->where('industry_type_id', $request->industry_type);
        }

        $companies = $query->with('organization:id,name', 'user')->paginate(10)->through(function($company){
            $company->active_jobs = Job::where('company_id', $company->id)->openPosition()->count();
            return $company;
        });

        $industry_types = IndustryType::all();
        $organization_types = OrganizationType::all();
        $countries_types = Countries::all();

        // return view('admin.university.index', compact('companies', 'industry_types', 'organization_types'));
        return view('admin.university.index', compact('universities','companies', 'industry_types', 'organization_types','countries_types'));
    }

    public function create()
    {
        abort_if(!userCan('university.create'), 403);

        $data['countries'] = Countries::all();
        $data['industry_types'] = IndustryType::all();
        $data['organization_types'] = OrganizationType::all();
        $data['team_sizes'] = TeamSize::all();

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

    public function store(UniversityCreateFormRequest $request)
    {

      
        abort_if(!userCan('university.create'), 403);
        try {
            $folder = '/university/'.$request['url'];
        
        $file_logo = $request->file('logo');

        if(!empty(isset($request['images']))){
            // $file_images = $request->file('images');
            $fileImages = $request->file('images');
            $pathImages = [];
        
            foreach ($fileImages as $fileImage) {
                if (!empty($fileImage)) {
                    $pathImage = Storage::disk('public')->put($folder, $fileImage);
                    $pathImages[] = $pathImage;
                }
            }
        }

     
     
        if(!empty(isset($request['headerImageDesktop']))){
            $file_headerImageDesktop = $request->file('headerImageDesktop');
        }
        if(!empty(isset($request['headerImageMobile']))){
            $file_headerImageMobile = $request->file('headerImageMobile');
        }

        $request= $request->all();
       
        $path_logo = Storage::disk('public')->put($folder, $file_logo);
        // $path_logo = Storage::disk('public')->putFileAs($folder, $file_logo);
       

        // $path = Storage::disk('public')->put($folder, $file);
        $request['social_media'] = '';
        // $request['url']='';
        // $request['country_id']=1;
        $request['logo'] = $path_logo;
        

        // $request['headerImageDesktop']='';
        // $request['headerImageMobile']='';
        // $request['images']='';
        // $request['videos']='';
        // dd(!empty($request['videos'][0]));
        
        if(!empty($pathImages)){

            foreach($pathImages as $path_images){
                $img['mediaUrl']= $path_images;
                $img['mediaTitle']="_images";
                $img['altText']='images';
               
                $finalArrImages[]=$img;
            }
            $request['images'] = json_encode($finalArrImages);
        }else{
            $request['images'] = NULL;
        }

        if(!empty(isset($file_headerImageDesktop))){
            $path_headerImageDesktop = Storage::disk('public')->put($folder, $file_headerImageDesktop);
            $request['headerImageDesktop']= $path_headerImageDesktop;
        }
        if(!empty(isset($file_headerImageMobile))){
            $path_headerImageMobile = Storage::disk('public')->put($folder, $file_headerImageMobile);
            $request['headerImageMobile']= $path_headerImageMobile;
        }
      
      
        // if(!empty($request['videos']) && !empty($request['videos'][0])){

        //     foreach($request['videos'] as $video){
        //         $videos['mediaUrl']=$video;
        //         $videos['mediaTitle']="_video";
        //         $videos['altText']='images';
        //         // $videos['videoKey']=end(explode('/',$video));
        //         // $videos['thumbUrl']=' https://i.ytimg.com/vi/'.end(explode('/',$video)).'/hqdefault.jpg';
        //         $finalArr[]=$videos;
        //     }
        //     $request['videos']=json_encode($finalArr);
        // }else{
        //     unset($request['videos']);
        //     unset($request['social_media']);
        // }



        if (!empty($request['videos']) && !empty($request['videos'][0])) {
            foreach ($request['videos'] as $video) {
                if (is_string($video)) {  // Check if $video is a string
                    $videos['mediaUrl'] = $video;
                    $videos['mediaTitle'] = "_video";
                    $videos['altText'] = 'images';
                    $finalArr[] = $videos;
                }
            }
            $request['videos'] = json_encode($finalArr);
            unset($request['social_media']);

        } else {
            unset($request['videos']);
            unset($request['social_media']);
        }


        if(!empty($request['admission_dates'])){
            $admission_dates_dateTime = Carbon::parse($request['admission_dates']);
            $request['admission_dates'] = $admission_dates_dateTime->format('Y-m-d H:i:s');
        }

        $request['data_source_id']=1;
        // $request['status']=1;
        $request['sid']=1;
        $request['city_id']=1;

     

        $universities = Universities::create($request);

        
        
       
            flashSuccess(__('university_created_successfully'));
            // session()->flash('success', __('university_created_successfully'));
            return redirect()->route('university.index');
        } catch (\Throwable $th) {
            return redirect()->back()->with('error', config('app.debug') ? $th->getMessage() : 'Something went wrong');
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        abort_if(!userCan('university.view'), 403);

        $universities = Universities::findOrFail($id);

        return view('admin.university.show', compact('universities'));


    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        abort_if(!userCan('university.update'), 403);

        $data['universities'] = Universities::findOrFail($id);

       
        $data['countries'] = Countries::all();
        // $data['states'] = State::all();
        // dd($data['countries']);
        // $data['citys'] = City::all();
        $find_state_id = null;
        if(!empty($data['universities']->city_id)){
            $find_state_id = City::where("id", $data['universities']->city_id)->pluck('state_id')->first();
        }
        $data['states'] = State::where("country_id", $data['universities']->country_id)->get();
        $data['citys'] = City::where("id", $data['universities']->city_id)->get();
        $data['find_state_id'] = $find_state_id;
    

        return view('admin.university.edit', $data);
    }

    public function update(UniversityUpdateFormRequest $request, Universities $university)
    {

        // dd($request->all());

        abort_if(!userCan('university.update'), 403);

        $existingImages = !empty($university['images']) ? json_decode($university['images'], true) : [];
        $folder = '/university/'.$request['url'];
        try {
          
            if(!empty($request->input('newImgs'))){
                $existingImages = [];
                foreach ($request->input('newImgs') as $newImageData) {
                    $newMediaUrlParts = explode('/', $newImageData['mediaUrl']);
                    $newFilename = end($newMediaUrlParts);
                    $newimg = [];
                    $newimg['mediaUrl'] = $folder. '/' .$newFilename;
                    $newimg['mediaTitle'] = !empty($newImageData['mediaTitle']) ? $newImageData['mediaTitle'] : "_images";
                    $newimg['altText'] = !empty($newImageData['altText']) ? $newImageData['altText'] : "images";

                    $existingImages[] = $newimg;
                }

                $university['images'] = json_encode($existingImages);
              
            }
         
            if (!empty($request->input('img'))) {
            
                foreach ($request->input('img') as $imageData) {
                    if (isset($imageData['mediaUrl'])) {
                        $mediaUrl = $imageData['mediaUrl'];
            
                        if (is_string($mediaUrl)) {
                            $fileContent = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $mediaUrl));
            
                            // Generate a unique filename
                            $filename = time() . '_' . uniqid() . '.png';
            
                            // Determine the file path
                            // $filePath = public_path($folder. '/' .$filename);
                            $filePath = $folder . '/' . $filename;
    
                            // Write the file content to the specified path
                            // $result = file_put_contents($filePath, $fileContent);
                          
                            $result = Storage::disk('public')->put($filePath, $fileContent);
                            if ($result !== false) {
                                $img = [];
                                $img['mediaUrl'] = $folder. '/' .$filename;
                                $img['mediaTitle'] = !empty($imageData['mediaTitles']) ? $imageData['mediaTitles'] : "_images";
                                $img['altText'] = !empty($imageData['altTexts']) ? $imageData['altTexts'] : "images";
            
                                $existingImages[] = $img;
                            }
                        }
                    }
                }
        
                $university['images'] = json_encode($existingImages);
            }
           
          
           
            $file_logo = ($request->file('logo'))? $request->file('logo'): NULL;
 
         
            if(!empty(isset($request['headerImageDesktop']))){
                $file_headerImageDesktop = $request->file('headerImageDesktop');
            }
            if(!empty(isset($request['headerImageMobile']))){
                $file_headerImageMobile = $request->file('headerImageMobile');
            }

            $request = $request->all();

            if (!empty($file_logo)) {
                if ($university['logo'] && Storage::disk('public')->exists($university['logo'])) {
                    Storage::disk('public')->delete($university['logo']);
                }
                $path_logo = Storage::disk('public')->put($folder, $file_logo);
                $university['logo'] = $path_logo;
            }

            if(!empty(isset($file_headerImageDesktop))){
                if ($university['headerImageDesktop'] && Storage::disk('public')->exists($university['headerImageDesktop'])) {
                    Storage::disk('public')->delete($university['headerImageDesktop']);
                }
                $path_headerImageDesktop = Storage::disk('public')->put($folder, $file_headerImageDesktop);
                $university['headerImageDesktop'] = $path_headerImageDesktop;
            }


            if(!empty(isset($file_headerImageMobile))){
                if ($university['headerImageMobile'] && Storage::disk('public')->exists($university['headerImageMobile'])) {
                    Storage::disk('public')->delete($university['headerImageMobile']);
                }
                $path_headerImageMobile = Storage::disk('public')->put($folder, $file_headerImageMobile);
                $university['headerImageMobile'] = $path_headerImageMobile;
            }


                ////// if(!empty($pathImages)){

                //  //     foreach($pathImages as $path_images){
                //  //         // dd($path_images);
                //  //         $img['mediaUrl']= $path_images;
                //  //         $img['mediaTitle']="_images";
                // //         $img['altText']='images';

                ////         $finalArrImages[]=$img;
                // //     }
                // //     $university['images'] = json_encode($finalArrImages);
                // // }else{
                // //     $university['images'] = $university['images'];
                //// }


            if (!empty($request['videos']) && !empty($request['videos'][0])) {
                $finalArr = [];
    
                foreach ($request['videos'] as $video) {
                    if (is_string($video)) {
                        $videos['mediaUrl'] = $video;
                        $videos['mediaTitle'] = "_video";
                        $videos['altText'] = 'images';
                        $finalArr[] = $videos;
                    }
                }
    
                $university['videos'] = json_encode($finalArr);
                unset($university['social_media']);
            } else {
                unset($university['videos']);
                unset($university['social_media']);
            }


            if(!empty($request['admission_dates'])){
                $admission_dates_dateTime = Carbon::parse($request['admission_dates']);
                $university['admission_dates'] = $admission_dates_dateTime->format('Y-m-d H:i:s');
            }


            $new_on_campus_accommodation = [];
            $new_on_campus_accommodation['details'] = (!empty($request['on_campus_accommodation_details'])) ? $request['on_campus_accommodation_details'] : null;
            $new_on_campus_accommodation['website'] = (!empty($request['on_campus_accommodation_website'])) ? $request['on_campus_accommodation_website'] : null;
            $new_on_campus_accommodation['livingExpenseDetails'] = (!empty($request['on_campus_accommodation_livingExpenseDetails'])) ? $request['on_campus_accommodation_livingExpenseDetails'] : null;
            $new_on_campus_accommodation['livingExpenseUrl'] = (!empty($request['on_campus_accommodation_livingExpenseUrl'])) ? $request['on_campus_accommodation_livingExpenseUrl'] : null;
            $new_on_campus_accommodation['ugDescription'] = (!empty($request['on_campus_accommodation_ugDescription'])) ? $request['on_campus_accommodation_ugDescription'] : null;
            $new_on_campus_accommodation['pgDescription'] = (!empty($request['on_campus_accommodation_pgDescription'])) ? $request['on_campus_accommodation_pgDescription'] : null;
           if(!empty($new_on_campus_accommodation)){
            $university['on_campus_accommodation'] = json_encode($new_on_campus_accommodation);
           }


           $new_off_campus_accommodation = [];
           $new_off_campus_accommodation['description'] = (!empty($request['off_campus_accommodation_description'])) ? $request['off_campus_accommodation_description'] : null;
           $new_off_campus_accommodation['links'] = (!empty($request['off_campus_accommodation_links'])) ? $request['off_campus_accommodation_links'] : null;
   
           if (!empty($new_off_campus_accommodation['links'])) {
            foreach ($new_off_campus_accommodation['links'] as $key => $link) {
                $new_off_campus_accommodation['links'][$key] = (!empty($link)) ? $link : null;
            }
            }
   
           if (!empty($new_off_campus_accommodation)) {
           $university['off_campus_accommodation'] = json_encode($new_off_campus_accommodation);
           }

            $university['name'] = $request['name'];
            $university['url'] = $request['url'];
            $university['country_id'] = $request['country_id'];
            $university['meta_title'] = $request['meta_title'];
            $university['meta_keywords'] = $request['meta_keywords'];
            $university['meta_description'] = $request['meta_description'];
            $university['short_description'] = $request['short_description'];
            $university['entrance_requirement'] = $request['entrance_requirement'];
            
            $university['phone'] = $request['phone'];
            $university['email'] = $request['email'];
            $university['website'] = $request['website'];
            $university['address'] = $request['address'];
            $university['map_link'] = $request['map_link'];
            $university['wikipedia_url'] = $request['wikipedia_url'];
            $university['population_of_city'] = $request['population_of_city'];
            $university['size_of_city'] = $request['size_of_city'];
            $university['aboutCollege'] = $request['aboutCollege'];
            $university['aboutCollegePlacement'] = $request['aboutCollegePlacement'];
            // $university['on_campus_accommodation'] = $request['on_campus_accommodation'];
            // $university['off_campus_accommodation'] = $request['off_campus_accommodation'];
            $university['admissionRequirement'] = $request['admissionRequirement'];
           
            $university['campuses'] = $request['campuses'];
            //  $university['ranking_data'] = '$request['ranking_data']';
            // $university['sectionwiseData'] = $request['sectionwiseData'];
            // $university['entryCriteria'] = $request['entryCriteria'];
            // $university['courseWidget'] = $request['courseWidget'];

            // $university['feesTable'] = $request['feesTable'];
            $university['students'] = $request['students'];
            $university['reviews'] = $request['reviews'];
            $university['recruiters'] = $request['recruiters'];
            $university['establishment'] = $request['establishment'];
            $university['male_female_ratio'] = $request['male_female_ratio'];
            $university['known_as'] = $request['known_as'];
            $university['endowments'] = $request['endowments'];
            $university['international_students'] = $request['international_students'];
            $university['ug_pg_course_ratio'] = $request['ug_pg_course_ratio'];
            $university['total_campuses'] = $request['total_campuses'];
            $university['status']= $request['status'];

            $university['international_studentsContent'] = $request['international_studentsContent'];
            $university['scholarships_content'] = $request['scholarships_content'];
            $university['conclusion'] = $request['conclusion'];
            $university['rankings_short_desc'] = $request['rankings_short_desc'];
            $university['admission_short_desc'] = $request['admission_short_desc'];
            $university['course_overview'] = $request['course_overview'];
            $university['admission_overview'] = $request['admission_overview'];
            $university['date_deadline_overview'] = $request['date_deadline_overview'];
            $university['ranking_overview'] = $request['ranking_overview'];
            $university['scholarships_overview'] = $request['scholarships_overview'];
            

            
            // $university['data_source_id']=1;
            // $university['sid']=1;
            $university['city_id']=$request['city_id'];

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




    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {

        abort_if(!userCan('university.delete'), 403);

        $universities = Universities::findOrFail($id);

        if(!empty(isset($universities->logo))){
            deleteFile($universities->logo);
        }
        // if(!empty(isset($universities->images))){
        //     deleteFile($universities->images);
        // }
        if(!empty(isset($universities->headerImageMobile))){
            deleteFile($universities->headerImageMobile);
        }
        if(!empty(isset($universities->headerImageMobile))){
            deleteFile($universities->headerImageMobile);
        }
        
        $universities->delete();

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

    public function getStateList(Request $request)
    {
        $data['states'] = State::where("country_id", $request->country_id)
            ->get(["name", "id"]);
        return response()->json($data);
    }

    public function getCityList(Request $request)
    {
        $data['cities'] = City::where("state_id", $request->state_id)
            ->get(["name", "id"]);
        return response()->json($data);
    }

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

    //     $user->update(['status' => $request->status]);

    //     if ($request->status == 1) {
    //         return responseSuccess(__('company_activated_successfully'));
    //     } else {
    //         return responseSuccess(__('company_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);
    // }
}
