<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Universities;
use App\Models\Course;
use App\Models\Review;
use Modules\Faq\Entities\Faq;
// use Modules\Faq\Entities\FaqCategory;
use App\Models\Category;
use Modules\Language\Entities\Language;
use Modules\Faq\Http\Requests\FaqFormRequest;
use App\Http\Requests\ReviewCreateFormRequest;
use App\Http\Requests\ReviewUpdateFormRequest;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Support\Facades\Storage;
use App\Models\Countries;
use App\Models\Page;
use Carbon\Carbon;


class ReviewController extends Controller
{

    // use ValidatesRequests;
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request, $slug = null)
    {

        $condition = [];
        abort_if(!userCan('review.view'), 403);

        $categories = Category::where('type', 'review')->withCount('reviews')->get();

        if ($slug) {
            $reviews = Review::whereHas('category', function ($q) use ($slug) {
                $q->where('url', $slug);
            });

            if ($slug == "country-page") {
                $current_category_values = Countries::all('id', 'name');
                $default_label = "All Countries";
            } else if($slug == "page-category"){
                $current_category_values = Page::all('id', 'title as name');
                $default_label = "All Page Category";
            }else {
                $current_category_values = Universities::all('id', 'name');
                $default_label = "All Universities";
            }
        } else {
            $reviews = Review::query();
            $current_category_values = $request->current_category_values1;            
            $default_label = $request->default_label1;
        }

        if ($request->has('search')) {
            $condition[] = ["page_id", $request->search];
            $condition[] = ['category_id',$request->category_id ];
        }


        $reviews = $reviews->where($condition)->paginate(10);
        $reviews->appends(request()->except('page'));
        $reviews_group = $reviews->groupBy('code');

        $all_reviews_count = Review::count();

        return view('admin.review.index', compact('categories', 'reviews', 'all_reviews_count', 'reviews_group', 'default_label', 'current_category_values','slug'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        abort_if(!userCan('review.create'), 403);
        $app_languages = Language::all(['id', 'name', 'code']);
        $categories = Category::where('type', 'review')->oldest('order')->get();
        return view('admin.review.create', compact('categories', 'app_languages'));
    }

    /**
     * Store a newly created resource in storage.
     * @param ReviewCreateFormRequest $request
     * @return Renderable
     */
    public function store(ReviewCreateFormRequest $request)
    {
        abort_if(!userCan('review.create'), 403);
        if (!empty($request->universities_id)) {
            $request['universities_ids'] = $request->universities_id;
        } else {
            $request['universities_ids'] = NULL;
        }

        $folder = '/uploads/reviews';
        if (!empty($request->images)) {
            $file_logo = $request->file('images');
            $path_logo = Storage::disk('public')->put($folder, $file_logo);
        } else {
            $path_logo = NULL;
        }

        $review = Review::create([
            'category_id' => $request->category_id,
            'name' => $request->name,
            'comments' => $request->comments,
            'code' => $request->code,
            'display_date' => Carbon::parse($request->display_date),
            'images' => $path_logo,
            'address' => $request->address,
            'status' => $request->status,
            'star_rating' => $request->star_rating,
            'page_id' => $request['universities_ids'],
        ]);

        if ($review) {
            flashSuccess(__('review_created_successfully'));
            return back();
        } else {
            flashError();
            return back();
        }
    }

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

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        abort_if(!userCan('review.update'), 403);
        $reviews = Review::where('id', $id)->first();
        $universities = Universities::all(['id', 'name']);
        // $universities_ids = explode(",", $faq->page_id);
        $universities_ids = isset($reviews->page_id) ? $reviews->page_id : 0;
        $app_languages = Language::all(['id', 'name', 'code']);
        $categories = Category::where('type', 'review')->oldest('order')->get();
        return view('admin.review.edit', compact('reviews', 'categories', 'app_languages', 'universities_ids', 'universities'));
    }

    /**
     * Update the specified resource in storage.
     * @param ReviewUpdateFormRequest $request
     * @param int $id
     * @return Renderable
     */
    public function update(ReviewUpdateFormRequest $request, $id)
    {
        $folder = '/uploads/reviews';
        abort_if(!userCan('review.update'), 403);
        $review = Review::where('id', $id)->first();
        if (!empty($request->universities_id)) {
            // $universities_ids = implode(",", $request->universities_id);
            $request['universities_ids'] = $request->universities_id;
        } else {
            $request['universities_ids'] = NUll;
        }

        $file_images = ($request->file('images')) ? $request->file('images') : NULL;
        // dd($request->all());
        if (!empty($file_images)) {
            if ($review['images'] && Storage::disk('public')->exists($review['images'])) {
                Storage::disk('public')->delete($review['images']);
            }
            $path_logo = Storage::disk('public')->put($folder, $file_images);
        } else {
            $path_logo =  $review->images;
        }


        $review =   $review->update([
            'category_id' => $request->category_id,
            'name' => $request->name,
            'comments' => $request->comments,
            'code' => $request->code,
            'display_date' => Carbon::parse($request->display_date),
            'images' => $path_logo,
            'address' => $request->address,
            'status' => $request->status,
            'star_rating' => $request->star_rating,
            'page_id' => $request['universities_ids'],
        ]);

        if ($review) {
            flashSuccess(__('review_updated_successfully'));
            return redirect(route('review.index'));
        } else {
            flashError();
            return back();
        }
    }
    /**
     * Remove the specified resource from storage.
     * @param int $id
     * @return Renderable
     */
    public function destroy($id)
    {
        abort_if(!userCan('review.delete'), 403);
        $review = Review::where('id', $id)->first();
        $review->delete();

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

    public function getSelectBycategory(Request $request)
    {
        if ($request->category_id != '' && $request->term !='') {
            if ($request->category_id == 2 || $request->category_id == 32) {
                $data['faqSelect'] = [];
                $data['faqSelect']  = Universities::where('name', 'like', "%$request->term%")->get(['id', 'name'])->toArray();
            } elseif ($request->category_id == 3) {
                $data['faqSelect'] = [];
                $data['faqSelect']  = Course::where('name', 'like', "%$request->term%")->get(['id', 'name'])->toArray();
            }elseif ($request->category_id == 34) {
                $data['faqSelect'] = [];
                $data['faqSelect']  = Countries::where('name', 'like', "%$request->term%")->get(['id', 'name'])->toArray();
            }elseif ($request->category_id == 111) {
                $data['faqSelect'] = [];
                $data['faqSelect']  = Page::where('title', 'like', "%$request->term%")->get(['id', 'title'])->toArray();
            }else {
                $data['faqSelect'] = [];
                $data['faqSelect'] = 0;
            }
        }
        
        return response()->json($data);
    }
}
