<?php

namespace App\Http\View\Composers;

use Illuminate\View\View;
use App\Models\Pesanan;
use App\Models\Ulasan;
use Carbon\Carbon;
use Illuminate\Support\Facades\Auth;

class ReviewNotificationComposer
{
    /**
     * Bind data to the view.
     *
     * @param  \Illuminate\View\View  $view
     * @return void
     */
    public function compose(View $view)
    {
        if (Auth::check() && Auth::user()->role === 'user') {
            $user = Auth::user();
            $oneDayAgo = Carbon::now()->subDay();

            // Ambil pesanan yang sudah selesai lebih dari 24 jam
            $unreviewedProducts = Pesanan::where('user_id', $user->ID)
                ->where('status', 'selesai')
                ->where('tanggal_selesai', '<=', $oneDayAgo)
                ->with(['detail.produk'])
                ->get()
                ->flatMap(function ($pesanan) use ($user) {
                    return $pesanan->detail->filter(function ($detail) use ($pesanan, $user) {
                        // Cek apakah produk ini di pesanan ini sudah diulas oleh user
                        return !Ulasan::where('user_id', $user->ID)
                            ->where('pesanan_id', $pesanan->id)
                            ->where('produk_id', $detail->produk_id)
                            ->exists();
                    })->map(function ($detail) use ($pesanan) {
                        return [
                            'pesanan_id' => $pesanan->id,
                            'produk_id'  => $detail->produk_id,
                            'nama_produk'=> $detail->nama_produk,
                            'kode_pesanan' => $pesanan->kode_pesanan,
                            'foto'       => $this->getProdukFoto($detail->produk),
                        ];
                    });
                });

            $view->with('unreadReviews', $unreviewedProducts);
        } else {
            $view->with('unreadReviews', collect());
        }
    }

    private function getProdukFoto($produk)
    {
        if (!$produk || empty($produk->foto)) {
            return null;
        }

        $allPhotos = explode('|', $produk->foto);
        $firstPhoto = $allPhotos[0];
        
        if (str_contains($firstPhoto, ':')) {
            return explode(':', $firstPhoto)[1];
        }
        
        return $firstPhoto;
    }
}
