<?php

namespace App\Http\Controllers\Frontend;

use App\Models\Amenity;
use App\Models\Favorite;
use App\Models\Hostel;
use App\Models\PostImage;
use App\Models\PostNews;
use App\Models\Province;
use App\Models\Testimonial;
use App\Models\UserPackage;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class FindRoom2Controller extends Controller
{
    //
    public function index(Request $request)
    {
        $provinceData = \DB::table('post_news')
            ->leftJoin('province', 'post_news.province', '=', 'province.provinceid')
            ->select('province.provinceid', 'province.name', \DB::raw('COUNT(province.provinceid) as count'))
            ->where('deleted_at','=',null)
            ->groupBy('province.provinceid')->get();

        $typePost = \DB::table('post_news')
            ->select('post_type.id', 'post_type.name')
            ->rightJoin('post_type', 'post_news.type_id', '=', 'post_type.id')
            ->groupBy('post_type.id')
            ->get();

        $amenities = Amenity::query()->where('user_id', 0)->get();

        $owners = UserPackage::query()->where(function ($q) {
            $q->orWhere('end_date', '>', Carbon::now());
            $q->orwhereRaw('end_date > start_date');
        })->pluck('user_id')->unique()->toArray();

        $hostels = Hostel::query()->whereRaw('LENGTH(`desc`) > 100')
            ->whereNotNull('name')
            ->whereNotNull('province_id')
            ->whereNotNull('district_id')
            ->whereNotNull('ward_id')
            ->whereNotNull('address')
            ->where('is_display', true)
            ->where('number_empty_rooms', '>', 1)
            ->has('images')
            ->whereIn('owner_id', $owners)
            ->paginate(25);

        $fees = \DB::table('post_range_price')->orderBy('id')->get();

        $testimonials = cache()->remember('testimonials', 180 * 60, function () {
            return Testimonial::publish()->get();
        });

        return view('frontend3.find_room_2.home', compact('provinceData', 'typePost', 'amenities', 'fees', 'hostels', 'testimonials'));
    }

    public function getListPost(Request $request)
    {
        if(auth('backend')->check()){
            $user_id = auth('backend')->user()->id;
        }
        $search = $request->get('search', null);
        $province = $request->get('province', null);
        $district = $request->district;
        $sort = $request->sort;
        $post_type = $request->post_type;
        $amenities = $request->amenities;
        $price = $request->price;
        $price_range = $request->price_range;
        $page = $request->get('page', 1);


        $dataPost = PostNews::query();
        $dataPost->select('post_news.*','post_type.name as type_post')
            ->where('post_news.status','=',null)
            ->leftJoin('post_type','post_news.type_id','=','post_type.id');
        if ($province != null) {
            $dataPost->where('post_news.province', $province);
        }
        if ($search != null) {
            $dataPost->where('post_news.title', 'like', "%$search%");
        }
        if ($district != null) {
            $dataPost->whereIn('post_news.district', $district);
        }
        if ($sort != null) {
            switch ($sort) {
                case 1:
                    $dataPost = $dataPost->orderBy('post_news.title', 'asc');
                    break;
                case 2:
                    $dataPost = $dataPost->orderBy('post_news.title', 'desc');
                    break;
                case 3:
                    $dataPost = $dataPost->orderBy('post_news.price', 'asc');
                    break;
                case 4:
                    $dataPost = $dataPost->orderBy('post_news.price', 'desc');
                    break;
                default:
                    $dataPost = $dataPost->orderBy('post_news.id', 'desc');
                    break;
            }
        }
        if ($post_type != null) {
            $dataPost->whereIn('type_id', $post_type);
        }
        if ($amenities != null) {
            $dataPost->leftJoin('post_amenities', 'post_amenities.post_id', '=', 'post_news.id')
                ->whereIn('post_amenities.amenity_id', $amenities);
        }
        if ($price != null) {
            $dataPost->whereBetween('post_news.price', $price_range);
        }
        $dataPost = $dataPost->groupBy('post_news.id')
            ->orderBy('post_news.id', 'desc')
            ->paginate(25, ['*'], 'page', $page);

        foreach ($dataPost as $post){
            $post->image = PostImage::where('post_id',$post->id)->first()->image;
        }
        //get favorite
        if(!empty($user_id)){
            $post_favorites = Favorite::where('user_id',$user_id)->get();
            foreach($dataPost as $post){
                $post->favorite_status = false;
                foreach ($post_favorites as $favorite) {
                    if($post->id==$favorite->post_id){
                        $post->favorite_status = true;
                    }
                }
            }
        }
        return response([
            'status' => 1,
            'data' => $dataPost,
        ]);

    }

    public function getDistrictByProvince(Request $request)
    {
        $prov_id = $request->get('province_id', null);
        $district = \DB::table('district')->where('provinceid', $prov_id)->get();
        return response([
            'status' => true,
            'data' => $district,
        ]);
    }

    public function getTypePost(Request $request)
    {
        $typePost = \DB::table('post_news')
            ->leftJoin('room_types', 'post_news.type_id', '=', 'room_types.id');
        return $typePost;
    }

    public function getPostDetail($type,$slug, $id = null)
    {
        if ($id == null) {
            return redirect()->to('/tim-phong-2');
        }
        $dataPostDetail = PostNews::where('id', $id)->first();
        $amenities = \DB::table('post_amenities')
            ->join('amenities', 'post_amenities.amenity_id', '=', 'amenities.id')
            ->where('post_amenities.post_id', $id)->get();
        $images = PostImage::where('post_id', $id)->get();

        $postRelation = PostNews::select('post_news.*')
            ->select('post_news.*','post_type.name as type_post')
            ->leftJoin('post_type','post_news.type_id','=','post_type.id')
            ->where('post_news.id', '<>', $id)
            ->where('post_news.type_id', $dataPostDetail->type_id)
            ->where('post_news.ward', $dataPostDetail->ward)
            ->get();
        $user = PostNews::find($id)->user()->first();
        $typePost = \DB::table('post_news')
            ->select('post_type.id', 'post_type.name')
            ->rightJoin('post_type', 'post_news.type_id', '=', 'post_type.id')
            ->groupBy('post_type.id')
            ->get();

        return view('frontend3.find_room_2.new-detail', compact('dataPostDetail', 'amenities', 'images', 'postRelation', 'user', 'typePost', 'user'));
    }

    //favorite
    public function createFavorite(Request $request)
    {
        if (!auth('backend')->check()) {
            return response([
                'status' => 3,
                'message' => 'Hãy đăng nhập để thực hiện chức năng này.',
            ]);
        }
        $user_id = auth('backend')->user()->id;
        $post_id = $request->post_id;

        $check = false;
        $favorite = Favorite::where('user_id', $user_id)
            ->where('post_id', $post_id)->count();

        if ($favorite == 0) {
            Favorite::create([
                'user_id' => $user_id,
                'post_id' => $post_id,
            ]);
            $check = true;
        } else {
            Favorite::where('user_id', $user_id)
                ->where('post_id', $post_id)->delete();
        }

        return response([
            'status' => '1',
            'message' => 'Add favorite',
            'data'=>$check,
        ]);

    }
    public function getFavorite(Request $request)
    {
        $post_id = $request->post_id;
        if (!auth('backend')->check()) {
            return redirect()->back()->with('error', 'Bạn chưa đăng nhập.');
        }
        $userId = auth('backend')->user()->id;
        $items = Favorite::where('post_id',$post_id)
            ->where('user_id', $userId)
            ->get();
        return response([
            'status'=>1,
            'message'=>'Danh sách favorite',
            'data'=>$items,
        ]);
    }
    public function getPostByType(Request $request){
        $type = $request->type;
        PostNews::where('type_id', $type)->get();
        return 0;
    }

}