<?php

namespace App\Http\Controllers;

use App\Models\Ulasan;
use App\Models\Pesanan;
use App\Models\PesananDetail;
use App\Models\Produk;
use Illuminate\Http\Request;
use Carbon\Carbon;

class UlasanController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public function store(Request $request)
    {
        $request->validate([
            'pesanan_id' => 'required|exists:pesanan,id',
            'produk_id'  => 'required|exists:produk,id',
            'bintang'    => 'required|integer|min:1|max:5',
            'komentar'   => 'nullable|string|max:1000',
        ]);

        $pesanan = Pesanan::where('id', $request->pesanan_id)
            ->where('user_id', auth()->id())
            ->where('status', 'selesai')
            ->firstOrFail();

        // Batasi jumlah ulasan sesuai jumlah item produk yang sama di pesanan
        $jumlahProdukSama = $pesanan->detail()
            ->where('produk_id', $request->produk_id)
            ->count();

        $jumlahUlasanAda = Ulasan::where('user_id', auth()->id())
            ->where('pesanan_id', $request->pesanan_id)
            ->where('produk_id', $request->produk_id)
            ->count();

        if ($jumlahUlasanAda >= $jumlahProdukSama) {
            return back()->with('error', 'Anda sudah mengulas semua produk ini.');
        }

        Ulasan::create([
            'user_id'    => auth()->id(),
            'pesanan_id' => $request->pesanan_id,
            'produk_id'  => $request->produk_id,
            'bintang'    => $request->bintang,
            'komentar'   => $request->komentar,
            'is_visible' => true,
            'is_auto'    => false,
        ]);

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

    public function penjualIndex()
    {
        $userId = auth()->id();

        // 1. Jalankan Auto-review check (Dinonaktifkan sesuai permintaan: ganti dengan sistem notifikasi)
        // $this->generateAutoReviews($userId);

        $query = Ulasan::whereHas('produk', function ($query) use ($userId) {
                $query->where('user_id', $userId);
            })
            ->with(['produk', 'user', 'pesanan.detail']);

        $ratingFilter = request('rating');
        if ($ratingFilter === 'bagus') {
            $query->where('bintang', '>=', 4);
        } elseif ($ratingFilter === 'jelek') {
            $query->where('bintang', '<=', 3);
        }

        $ulasans = $query->orderBy('created_at', 'desc')->paginate(15)->appends(request()->query());

        return view('ulasan.penjual-index', compact('ulasans'));
    }

    public function toggleVisibility(Request $request)
    {
        $request->validate([
            'ulasan_ids' => 'required|array',
            'ulasan_ids.*' => 'exists:ulasan,id',
            'action' => 'required|in:show,hide'
        ]);

        $userId = auth()->id();
        $isVisible = $request->action === 'show';

        // Pastikan ulasan yang diubah milik penjual ini
        Ulasan::whereIn('id', $request->ulasan_ids)
            ->whereHas('produk', function($q) use ($userId) {
                $q->where('user_id', $userId);
            })
            ->update([
                'is_visible' => $isVisible
            ]);

        $message = $isVisible ? 'Ulasan terpilih berhasil ditampilkan secara publik.' : 'Ulasan terpilih berhasil disembunyikan.';
        return back()->with('success', $message);
    }

    private function generateAutoReviews($penjualId)
    {
        /* 
        // LOGIKA DINONAKTIFKAN: Diganti dengan sistem notifikasi untuk User
        $batasWaktu = Carbon::now()->subDay();

        $pesanans = Pesanan::where('status', 'selesai')
            ->where('updated_at', '<=', $batasWaktu)
            ->whereHas('detail', function($q) use ($penjualId) {
                $q->whereHas('produk', function($q2) use ($penjualId) {
                    $q2->where('user_id', $penjualId);
                });
            })
            ->with(['detail.produk'])
            ->get();

        foreach ($pesanans as $pesanan) {
            foreach ($pesanan->detail as $detail) {
                if ($detail->produk->user_id == $penjualId) {
                    $cekUlasan = Ulasan::where('pesanan_id', $pesanan->id)
                        ->where('produk_id', $detail->produk_id)
                        ->first();

                    if (!$cekUlasan) {
                        Ulasan::create([
                            'user_id'    => $pesanan->user_id,
                            'pesanan_id' => $pesanan->id,
                            'produk_id'  => $detail->produk_id,
                            'bintang'    => 5,
                            'komentar'   => 'Sangat Bagus (Ulasan Otomatis)',
                            'is_visible' => true,
                            'is_auto'    => true,
                        ]);
                    }
                }
            }
        }
        */
    }
}