<?php

namespace App\Http\Controllers;

use App\Models\Product;
use App\Models\Penjualan;
use App\Models\DetailPenjualan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Midtrans\Snap;
use Midtrans\Config;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;

class CartController extends Controller
{
    public function index()
    {
        $cart = session()->get('cart', []);
        
        // Debug: lihat isi cart
        Log::info('Cart contents:', $cart);
        
        return view('cart.index', compact('cart'));
    }

    public function add(Request $request, $id)
    {
        // Ambil produk dengan relasi images
        $produk = Product::with('images')->findOrFail($id);

        if ($produk->stok <= 0) {
            return back()->with('error', 'Stok produk habis!');
        }

        if ($produk->is_expired) {
            return back()->with('error', 'Produk ini sudah kadaluwarsa dan tidak dapat dibeli!');
        }

        // CARI FOTO YANG VALID
        $fotoPath = null;
        
        // 1. Cari primary image dari relasi images
        $primaryImage = $produk->images->where('is_primary', true)->first();
        if ($primaryImage && $primaryImage->foto) {
            $fotoPath = $primaryImage->foto;
        }
        
        // 2. Jika tidak ada primary, ambil foto pertama
        if (!$fotoPath && $produk->images->first()) {
            $fotoPath = $produk->images->first()->foto;
        }
        
        // 3. Fallback ke kolom foto lama
        if (!$fotoPath && $produk->foto) {
            $fotoPath = $produk->foto;
        }
        
        // 4. Jika masih null, coba cari dari storage langsung
        if (!$fotoPath) {
            // Cek apakah ada file di storage/produk dengan nama produk_id
            $possibleFiles = [
                'produk/' . $id . '.jpg',
                'produk/' . $id . '.png',
                'produk/' . $id . '.jpeg',
            ];
            foreach ($possibleFiles as $file) {
                if (Storage::disk('public')->exists($file)) {
                    $fotoPath = $file;
                    break;
                }
            }
        }

        $cart = session()->get('cart', []);

        if (isset($cart[$id])) {
            // Cek stok sebelum menambah
            if ($produk->stok <= $cart[$id]['qty']) {
                return back()->with('error', 'Stok tidak mencukupi! Stok tersedia: ' . $produk->stok);
            }
            $cart[$id]['qty']++;
        } else {
            $cart[$id] = [
                'id' => $produk->produk_id,
                'nama' => $produk->nama_produk,
                'harga' => $produk->harga,
                'qty' => 1,
                'stok' => $produk->stok,
                'foto' => $fotoPath // PASTIKAN INI TERISI
            ];
        }

        session()->put('cart', $cart);
        
        // Debug: lihat cart setelah ditambahkan
        Log::info('Cart after add:', $cart);

        // Jika beli langsung (buy_now)
        if ($request->has('buy_now') && $request->buy_now == 1) {
            $checkoutItems = [
                $id => $cart[$id]
            ];
            session()->put('checkout_cart', $checkoutItems);
            return redirect()->route('penjualan.create');
        }

        return back()->with('success', 'Produk ditambahkan ke keranjang');
    }

    public function remove($id)
    {
        $cart = session()->get('cart', []);
        if (isset($cart[$id])) {
            unset($cart[$id]);
            session()->put('cart', $cart);
        }
        return back()->with('success', 'Produk dihapus dari keranjang');
    }

    public function clear()
    {
        session()->forget('cart');
        return back()->with('success', 'Keranjang berhasil dikosongkan');
    }

    public function checkout(Request $request)
    {
        $cart = session()->get('cart', []);
        $selected = $request->input('selected', []);

        Log::info('Checkout - Selected products:', $selected);
        Log::info('Checkout - Cart contents:', $cart);

        if (empty($selected)) {
            return redirect()->route('cart.index')
                ->with('error', 'Pilih minimal 1 produk!');
        }

        $checkoutItems = [];
        foreach ($selected as $produkId) {
            if (isset($cart[$produkId])) {
                $produk = Product::find($produkId);
                if (!$produk) {
                    return redirect()->route('cart.index')
                        ->with('error', "Produk dengan ID {$produkId} tidak ditemukan!");
                }

                if ($produk->stok < $cart[$produkId]['qty']) {
                    return redirect()->route('cart.index')
                        ->with('error', "Stok {$produk->nama_produk} tidak mencukupi! Tersedia: {$produk->stok}");
                }

                if ($produk->is_expired) {
                    return redirect()->route('cart.index')
                        ->with('error', "Produk {$produk->nama_produk} sudah kadaluwarsa!");
                }

                $checkoutItems[$produkId] = $cart[$produkId];
            }
        }

        if (empty($checkoutItems)) {
            return redirect()->route('cart.index')
                ->with('error', 'Produk tidak valid!');
        }

        session()->put('checkout_cart', $checkoutItems);
        return redirect()->route('penjualan.create');
    }

    public function processPayment(Request $request)
    {
        $cart = session()->get('cart', []);
        $selected = $request->input('selected', []);

        if (empty($selected)) {
            return redirect()->route('cart.index')
                ->with('error', 'Pilih minimal 1 produk!');
        }

        $checkoutItems = [];
        foreach ($selected as $produkId) {
            if (!isset($cart[$produkId])) {
                return response()->json(['error' => 'Produk tidak ditemukan di keranjang!'], 400);
            }

            $produk = Product::find($produkId);
            if (!$produk) {
                return response()->json(['error' => "Produk ID {$produkId} tidak ditemukan!"], 400);
            }

            if ($produk->stok < $cart[$produkId]['qty']) {
                return response()->json(['error' => "Stok {$produk->nama_produk} tidak mencukupi! Tersedia: {$produk->stok}"], 400);
            }

            if ($produk->is_expired) {
                return response()->json(['error' => "Produk {$produk->nama_produk} sudah kadaluwarsa!"], 400);
            }

            $checkoutItems[$produkId] = $cart[$produkId];
        }

        if (empty($checkoutItems)) {
            return response()->json(['error' => 'Tidak ada produk valid!'], 400);
        }

        session()->put('checkout_cart', $checkoutItems);

        return response()->json([
            'redirect' => route('penjualan.create')
        ]);
    }

    public function payment()
    {
        $snapToken = session()->get('snap_token');
        $penjualanId = session()->get('penjualan_id');

        if (!$snapToken || !$penjualanId) {
            return redirect()->route('cart.index')
                ->with('error', 'Sesi pembayaran tidak valid, silakan ulangi.');
        }

        return view('cart.payment', compact('snapToken', 'penjualanId'));
    }
}