<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\CarOwner;
use App\Models\User;
use App\Models\CarOwnerCar;
use App\Models\WashDetail;
use App\Models\Rating;
use App\Models\Review;
use App\Models\CarWashOwner;
use Carbon\Carbon;
use DB;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Validator;
use Config;
use Hash;
use Auth;

class CwoReviewController extends Controller
{
    public function __construct(){
    }


    public function index(){
    }

    public function addReviewReply(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                // 'cwo_id' => 'required',
                // 'wash_id' => 'required',
                'review_id' => 'required',
                'user_id' => 'required',
                'review_reply' => 'required'
            ],
            [
                // 'user_id.required' => 'Please enter user id'
            ]
        );

        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        // $cwo_id = $request->input('cwo_id');
        // $wash_id = $request->input('wash_id');
        $review_id = $request->input('review_id');
        $user_id = $request->input('user_id');
        $review_reply = $request->input('review_reply');
        $dt = Carbon::now();
        $reviewDetail = Review::findorfail($review_id);
        $cwo_id = $reviewDetail->cwo_id;
        $wash_id = $reviewDetail->wash_id;

        $getReviewCount = Review::where('wash_id', $wash_id)->where('is_cwo_user', 1)->count();
        if($getReviewCount > 0){
            return response()->json([
                'success' => 0,
                'message' => 'Review reply has been already submitted for this wash.',
            ]);
        }

        

        $reviewData=[
                'cwo_id'=> $cwo_id,
                'user_id'=> $user_id,
                'wash_id'=> $wash_id,
                'is_cwo_user'=> 1,
                'review'=> $review_reply,
                'parent_review_id'=> $review_id,
                'created_at'=>$dt->toDayDateTimeString(),
                'updated_at'=>$dt->toDayDateTimeString(),
            ];
        $insertReview = Review::create($reviewData);
        $review_id = $insertReview->id;
        
        return response()->json([
                'success' => 1,
                'message' => 'Success',
                'review_reply_id'=> $review_id
            ]);
    }

    public function getReviews(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'cwo_id' => 'required'
            ],
            [
                // 'cwo_id.required' => 'Please enter cwo id'
            ]
        );

        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $cwo_id = $request->input('cwo_id');
        $getCwo = CarWashOwner::select('cwo_company')->where('id', $cwo_id)->first();
        $rating = getCwoRating($cwo_id);
        $reviewCount = getCwoReviewCount($cwo_id);

        $dataDisplay=[];
        $dataArray = [];
        $getReview = Review::select('reviews.id', 'reviews.user_id', 'reviews.review', 'users.name')
                        ->where('reviews.cwo_id', "=", $cwo_id)
                        ->where('reviews.is_cwo_user', 0)
                        ->where('reviews.parent_review_id', 0)
                        ->join('users', 'users.id', '=', 'reviews.user_id')
                        // ->join('cwo_master', 'cwo_master.id', '=', 'reviews.cwo_id')
                        ->get();
        if($getReview != ''){
            foreach ($getReview as $d) {
                $dataDisplay['review_id'] = $d->id;
                $dataDisplay['review'] = $d->review;
                $dataDisplay['co_name'] = $d->name;
                $dataDisplay['reply_review_id'] = '';
                $dataDisplay['reply'] = '';
                $dataDisplay['cwo_user_name'] = '';
                $dataDisplay['cwo_company'] = '';

                $getReply = Review::select('reviews.id', 'reviews.user_id', 'reviews.review', 'users.name')
                        ->where('reviews.cwo_id', "=", $cwo_id)
                        ->where('reviews.is_cwo_user', 1)
                        ->where('reviews.parent_review_id', $d->id)
                        ->join('users', 'users.id', '=', 'reviews.user_id')
                        // ->join('cwo_master', 'cwo_master.id', '=', 'reviews.cwo_id')
                        ->first();
                        // print_r($getReply->toArray());exit;
                if($getReply != ''){  
                    $dataDisplay['reply_review_id'] = $getReply->id;
                    $dataDisplay['reply'] = $getReply->review;
                    $dataDisplay['cwo_user_name'] = $getReply->name;
                    $dataDisplay['cwo_company'] = $getCwo->cwo_company;
                }      

                $dataArray[] = $dataDisplay;
            }
        }
        
        return response()->json([
                'success' => 1,
                'message' => 'Success',
                'rating' => $rating,
                'reviewCount' => $reviewCount,
                'reviews' => $dataArray
            ]);
    }

    public function deleteReview(Request $request){
        $validate = Validator::make(
            $request->all(),
            [
                'review_id' => 'required'
            ],
            [
                // 'review_id.required' => 'Please enter review id'
            ]
        );

        if($validate->fails()) {
            $errorString = implode(",", $validate->messages()->all());
            return response()->json([
                'success' => 0,
                'message' => $errorString,
            ]);
        }
        $review_id = $request->input('review_id');
        $dt = Carbon::now();

        $reviewDetail = Review::findorfail($review_id);
        $reviewDetail->delete();
        
        return response()->json([
                'success' => 1,
                'message' => 'Review has been deleted successfully.'
            ]);
    }

    



}
