<?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 CoRatingController extends Controller
{
    public function __construct(){
    }


    public function index(){
    }

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

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

        if($rating != '') {
            $getRatingCount = Rating::where('wash_id', $wash_id)->count();
            if($getRatingCount > 0){
                return response()->json([
                    'success' => 0,
                    'message' => 'Rating have been already submitted for this wash.',
                ]);
            }
        }


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

        $washDetail = WashDetail::findorfail($wash_id);
        $cwo_id = $washDetail->cwo_id;

        $getCo = CarOwner::select('id')->where('user_id', $user_id)->first();
        $co_id = $getCo->id;

        if($rating != '') {
            $ratingData=[
                'cwo_id'=> $cwo_id,
                'co_id'=> $co_id,
                'wash_id'=> $wash_id,
                'rating'=> $rating,
                'created_at'=>$dt->toDayDateTimeString(),
                'updated_at'=>$dt->toDayDateTimeString(),
            ];
            $insertRating = Rating::create($ratingData);
            $rating_id = $insertRating->id;
        } else {
            $rating_id = 0;
        }
        

        if($review != ''){
            $reviewData=[
                    'cwo_id'=> $cwo_id,
                    'user_id'=> $user_id,
                    'wash_id'=> $wash_id,
                    'is_cwo_user'=> 0,
                    'review'=> $review,
                    'created_at'=>$dt->toDayDateTimeString(),
                    'updated_at'=>$dt->toDayDateTimeString(),
                ];
            $insertReview = Review::create($reviewData);
            $review_id = $insertReview->id;
        } else {
            $review_id = 0;
        }
        
        return response()->json([
                'success' => 1,
                'message' => 'Success',
                'rating_id' => $rating_id,
                'review_id'=> $review_id
            ]);
    }

    public function reviewDetails(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
            ]);
    }

    



}
