<?php

namespace App\Http\Controllers;

use App\Models\Review;
use App\Models\Order;
use Illuminate\Http\Request;

class ReviewController extends Controller
{
    /**
     * Simpan review produk dari halaman riwayat pesanan.
     * Hanya bisa dilakukan jika order status = 'selesai' dan belum pernah dirating.
     */
    public function store(Request $request)
    {
        $request->validate([
            'order_id'   => 'required|exists:orders,id',
            'product_id' => 'required|exists:products,id',
            'rating'     => 'required|integer|min:1|max:5',
            'komentar'   => 'nullable|string|max:1000',
        ]);

        $userId  = auth()->id();
        $orderId = $request->order_id;

        // Pastikan order milik user dan statusnya 'selesai'
        $order = Order::where('id', $orderId)
                      ->where('user_id', $userId)
                      ->where('status', 'selesai')
                      ->firstOrFail();

        // Pastikan produk memang ada di order ini
        $itemExists = $order->items()->where('product_id', $request->product_id)->exists();
        if (!$itemExists) {
            return back()->with('error', 'Produk tidak ditemukan dalam pesanan ini.');
        }

        // Cek supaya tidak bisa review dua kali untuk produk yang sama di order yang sama
        $alreadyReviewed = Review::where('user_id', $userId)
                                  ->where('order_id', $orderId)
                                  ->where('product_id', $request->product_id)
                                  ->exists();

        if ($alreadyReviewed) {
            return back()->with('error', 'Kamu sudah memberikan ulasan untuk produk ini.');
        }

        Review::create([
            'user_id'    => $userId,
            'product_id' => $request->product_id,
            'order_id'   => $orderId,
            'rating'     => $request->rating,
            'komentar'   => $request->komentar,
        ]);

        return back()->with('success', 'Ulasan berhasil dikirim! Terima kasih 🎉');
    }
}
