<?php

namespace App\Http\Controllers;

use App\Models\Product;
use App\Models\Cart; // Tambahkan ini
use Illuminate\Http\Request;

class CartController extends Controller
{
    public function index()
    {
        // Ambil data dari database berdasarkan user yang login
        $cart = Cart::with('product')->where('user_id', auth()->id())->get();
        return view('cart.index', compact('cart'));
    }

    

   public function add(Request $request, $id) // Tambahin Request $request di sini
    {
        if (!auth()->check()) {
            return response()->json([
                'success' => false,
                'message' => 'Harus login dulu'
            ], 401);
        }

        $product = Product::findOrFail($id);
        $userId = auth()->id();
        
        // Ambil jumlah dari input stepper, kalau gak ada default 1
        $qtyInput = (int) $request->input('quantity', 1);

        // Validasi: Jangan sampai inputnya 0 atau negatif
        if ($qtyInput < 1) $qtyInput = 1;

        // Cek apakah barang sudah ada di keranjang
        $cartItem = Cart::where('user_id', $userId)
                        ->where('product_id', $id)
                        ->first();

        if ($cartItem) {
            // HITUNG TOTAL BARU: jumlah lama + input baru
            $totalBaru = $cartItem->jumlah + $qtyInput;

            // CEK STOK: Jangan sampai total di keranjang melebihi stok produk
            if ($totalBaru > $product->stock) {
                return response()->json([
                    'success' => false,
                    'message' => 'Stok tidak mencukupi! Sisa stok: ' . $product->stock
                ], 422);
            }

            $cartItem->update(['jumlah' => $totalBaru]);
        } else {
            // CEK STOK untuk barang baru
            if ($qtyInput > $product->stock) {
                return response()->json([
                    'success' => false,
                    'message' => 'Jumlah melebihi stok! Sisa stok: ' . $product->stock
                ], 422);
            }

            Cart::create([
                'user_id' => $userId,
                'product_id' => $id,
                'jumlah' => $qtyInput, // Pakai qtyInput, bukan angka 1
                'harga' => $product->price,
            ]);
        }

        // Hitung total item unik atau total qty (tergantung kebutuhan badge lu)
        // Biasanya badge di navbar itu hitung total quantity
        $totalCart = Cart::where('user_id', $userId)->sum('jumlah');

        return response()->json([
            'success' => true,
            'message' => 'Berhasil ditambah ke keranjang',
            'cart_count' => $totalCart // Pastikan di JS lu pake key 'cart_count' (bukan cartCount)
        ]);
    }

public function checkout(Request $request)
{
    $selected = $request->selected_items;

    if (!$selected) {
        return back()->with('error', 'Pilih minimal 1 produk untuk checkout!');
    }

    $items = Cart::whereIn('id', $selected)
                ->where('user_id', auth()->id())
                ->with('product')
                ->get();

    if ($items->isEmpty()) {
        return back()->with('error', 'Item tidak ditemukan!');
    }

    $addresses = \App\Models\Address::where('user_id', auth()->id())->get();
    $provinces  = \App\Models\Province::all();

    // Tambah ini supaya view tidak error
    $product  = null;
    $quantity = 0;

    return view('orders.checkout', compact('items', 'addresses', 'provinces', 'product', 'quantity'));
}

public function update(Request $request, $id)
{
    $cartItem = Cart::where('id', $id)
        ->where('user_id', auth()->id())
        ->first();

    if (!$cartItem) {
        return response()->json(['success' => false], 404);
    }

    // LOGIKA BARU: Cek apakah kiriman berupa angka langsung (untuk ketik manual & tombol)
    if ($request->has('jumlah')) {
        $newQty = (int) $request->jumlah;
        
        if ($newQty <= 0) {
            $cartItem->delete();
            return response()->json(['success' => true, 'deleted' => true]);
        }
        
        $cartItem->jumlah = $newQty;
        $cartItem->save();
    } 
    // Logika lama (opsional tetap dipasang agar tidak error jika ada request type)
    else if ($request->type === 'increase') {
        $cartItem->increment('jumlah');
    } else if ($request->type === 'decrease') {
        if ($cartItem->jumlah > 1) {
            $cartItem->decrement('jumlah');
        } else {
            $cartItem->delete();
            return response()->json(['success' => true, 'deleted' => true]);
        }
    }

    return response()->json([
        'success' => true,
        'deleted' => false,
        'jumlah' => $cartItem->jumlah,
        'subtotal' => $cartItem->harga * $cartItem->jumlah,
        'formatted_subtotal' => number_format($cartItem->harga * $cartItem->jumlah, 0, ',', '.')
    ]);
}

  public function destroy($id)
{
    // Cari item berdasarkan ID dan milik user yang sedang login
    $cartItem = Cart::where('id', $id)
                    ->where('user_id', auth()->id())
                    ->first();

    if ($cartItem) {
        // Karena ini tombol "Hapus", kita langsung hapus permanen dari tabel
        $cartItem->delete();
        return back()->with('success', 'Produk berhasil dihapus dari keranjang!');
    }

    return back()->with('error', 'Produk tidak ditemukan!');
}
}