ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+...383-7(-.+



-%%--------------------------------------------------ÿÀ  ·" ÿÄ               ÿÄ 6     !1AQa"q‘±ð¡ÁÑ2Bá#Rb‚ñr ÿÄ              ÿÄ $         !1A2Qaq‘Ñ"ÿÚ   ? óª4¦ù‡;ýÔ­aH6’
¯ëxòPº°pp-LæsÊÿ DÖ7:,ûž«ðwZÃ›-FÈ¨Øðf:‹ß¦šè¸*¹Û”Énó¯¿Âùó†ñ&¶£AiÌ39Ž‡ÙÛ”Ï.«ÜþÆ6³§PT$‚5ê‹žæçKw±Ñµ£¡û÷©a5¡9tDB„ÀAB B„€Lsá<¨ª±*p|à¹Þ8 ÜÅÿ 
C!sÜK"=Jæòï¾—Æ9í‰ŒÄNl×n¹ü[HÒ;÷W¸…Fîá ¼÷ôÕbbñRH6ëÓªÆZÒ¦*¤´óßÞû,ªµãen«š	ÓQ§—%B¸ßšèÌˆèÃˆ(UK«ù‰õ5L™ Æý#ïeàCˆÍ—cßèµx/Ä_,¹ ÎäLÍï~~¥?ê?1¡Ìs€ {·íÔÿ z—šŠ~sgsV8_þZ•n2‡7ôé•àë¾ ž–^³ð§¡@‡Ó€hÜÄÃB¼9ôCC^Òàóvº\"Ý ºßáßâ˜ÐÆºCt%½¬£c~ž«:Íû_å}ó†ŠV¯8øsãºn
ùà´ÿ ÚÇY]ßâ¬&›ƒ‚Öwß¬ë<]BªÀB€„ !	                                                                                                                                                                       
ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+...383-7(-.+



-%%--------------------------------------------------ÿÀ  ·" ÿÄ               ÿÄ 6     !1AQa"q‘±ð¡ÁÑ2Bá#Rb‚ñr ÿÄ              ÿÄ $         !1A2Qaq‘Ñ"ÿÚ   ? óª4¦ù‡;ýÔ­aH6’
¯ëxòPº°pp-LæsÊÿ DÖ7:,ûž«ðwZÃ›-FÈ¨Øðf:‹ß¦šè¸*¹Û”Énó¯¿Âùó†ñ&¶£AiÌ39Ž‡ÙÛ”Ï.«ÜþÆ6³§PT$‚5ê‹žæçKw±Ñµ£¡û÷©a5¡9tDB„ÀAB B„€Lsá<¨ª±*p|à¹Þ8 ÜÅÿ 
C!sÜK"=Jæòï¾—Æ9í‰ŒÄNl×n¹ü[HÒ;÷W¸…Fîá ¼÷ôÕbbñRH6ëÓªÆZÒ¦*¤´óßÞû,ªµãen«š	ÓQ§—%B¸ßšèÌˆèÃˆ(UK«ù‰õ5L™ Æý#ïeàCˆÍ—cßèµx/Ä_,¹ ÎäLÍï~~¥?ê?1¡Ìs€ {·íÔÿ z—šŠ~sgsV8_þZ•n2‡7ôé•àë¾ ž–^³ð§¡@‡Ó€hÜÄÃB¼9ôCC^Òàóvº\"Ý ºßáßâ˜ÐÆºCt%½¬£c~ž«:Íû_å}ó†ŠV¯8øsãºn
ùà´ÿ ÚÇY]ßâ¬&›ƒ‚Öwß¬ë<]BªÀB€„ !	                                                                                                                                                                       
<?php


namespace App\Traits;


use App\Models\CardService;
use App\Models\Order;
use App\Models\OrderDetail;
use App\Models\TopUp;
use App\Models\Review;
use App\Models\TopUpService;

trait Rating
{

    public function getTopReview($reviewable_type, $reviewable_id)
    {
        $data['reviews'] = Review::with(['user:id,firstname,lastname,email,image_driver,image'])
            ->where('status', 1)
            ->where('reviewable_type', $reviewable_type)
            ->where('reviewable_id', $reviewable_id)
            ->latest()
            ->take(3)
            ->get();

        $orderType = ($reviewable_type == TopUp::class) ? TopUpService::class : CardService::class;
        $parentModel = ($reviewable_type == TopUp::class) ? 'topUp' : 'card';

        $hasAlreadyOrdered = OrderDetail::with(["detailable" => function ($query) use ($parentModel, $reviewable_id) {
            $query->whereHas($parentModel, function ($q) use ($reviewable_id) {
                $q->where('id', $reviewable_id);
            });
        }])
            ->whereHas('order', function ($qq) {
                $qq->where('payment_status', 1);
            })
            ->where('user_id', auth()->id())
            ->where('detailable_type', $orderType)
            ->exists();

        $data['hasAlreadyOrdered'] = $hasAlreadyOrdered;

        return $data;
    }

    public function getAllReviews($reviewable_type, $reviewable_id)
    {
        $reviews = Review::with(['user:id,firstname,lastname,email,image_driver,image'])
            ->where('status', 1)
            ->where('reviewable_type', $reviewable_type)
            ->where('reviewable_id', $reviewable_id)
            ->latest()
            ->get();


        $data['excellentReview'] = $reviews->where('rating', 5);
        $data['excellentCount'] = count($data['excellentReview']);

        $data['greatReview'] = $reviews->where('rating', 4);
        $data['greatCount'] = count($data['greatReview']);

        $data['averageReview'] = $reviews->where('rating', 3);
        $data['averageCount'] = count($data['averageReview']);

        $data['poorReview'] = $reviews->where('rating', 2);
        $data['poorCount'] = count($data['poorReview']);

        $data['badReview'] = $reviews->where('rating', 1);
        $data['badCount'] = count($data['badReview']);

        return $data;
    }

    public function reviewNotifyToAdmin($reviewer, $name, $rating): void
    {
        try {

            $adminParams = [
                'name' => $name ?? null,
                'rating' => $rating ?? 1,
            ];

            $adminAction = [
                "name" => $reviewer->firstname . ' ' . $reviewer->lastname,
                "image" => getFile($reviewer->image_driver, $reviewer->image),
                "link" => route('admin.review.list'),
                "icon" => "fas fa-ticket-alt text-white"
            ];

            $this->adminMail('BUYER_REVIEW_TO_ADMIN', $adminParams);
            $this->adminPushNotification('BUYER_REVIEW_TO_ADMIN', $adminParams, $adminAction);
            $this->adminFirebasePushNotification('BUYER_REVIEW_TO_ADMIN', $adminAction);
        } catch (\Exception $e) {

        }
    }
}
