<?php

namespace App\Http\Controllers\User;

use App\Http\Controllers\Controller;
use App\Models\Buket;
use App\Models\Pelanggan;
use App\Models\TransaksiBuket;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;

class PesanBuketController extends Controller
{
    public function index(Request $request)
    {
        $query = Buket::query();

        if ($request->filled('keyword')) {
            $search = $request->keyword;
            $query->where(function ($q) use ($search) {
                $q->where('nama', 'like', '%' . $search . '%')
                    ->orWhere('deskripsi', 'like', '%' . $search . '%');
            });
        }

        if ($request->filled('kategori') && $request->kategori != '') {
            $query->where('kategori', $request->kategori);
        }

        if ($request->filled('min_price')) $query->where('harga', '>=', $request->min_price);
        if ($request->filled('max_price')) $query->where('harga', '<=', $request->max_price);
        if ($request->filled('ukuran')) $query->where('ukuran', $request->ukuran);

        $buket = $query->paginate(8)->withQueryString();

        if ($request->ajax()) {
            return view('user._list', compact('buket'))->render();
        }

        return view('user/pesan-buket', compact('buket'));
    }

    public function detail($id)
    {
        $buket = Buket::findOrFail($id);

        return view('user/detail-buket', compact('buket'));
    }
    public function formulir($id)
    {
        $buket = Buket::findOrFail($id);
        return view('user/pembayaran-buket', compact('buket'));
    }
    public function store(Request $request)
    {
        $buket = Buket::findOrFail($request->id_buket);
        // 1. Validasi Detail dengan Pesan Kustom & Alias
        $validator = Validator::make($request->all(), [
            'nama'        => 'required|string|min:3|max:100',
            'no_wa'       => 'required|numeric|digits_between:10,15',
            'tgl_ambil'   => 'required|date|after_or_equal:today',
            'waktu_ambil' => 'required',
            'waktu_ambil' => [
                'required',
                'date_format:H:i',
                'after_or_equal:09:00',
                'before_or_equal:21:00',
            ],
            'bukti_bayar' => 'required|image|mimes:jpeg,png,jpg|max:2048',
            'request_khusus' => 'nullable|string|max:255',
            'ucapan'      => 'nullable|string|max:500',
        ], [
            // Detail Pesan Kustom
            'required'           => 'Kolom :attribute wajib diisi.',
            'string'             => 'Input :attribute harus berupa teks valid.',
            'min'                => ':attribute terlalu pendek, minimal :min karakter.',
            'max'                => ':attribute terlalu panjang, maksimal :max karakter.',
            'numeric'            => ':attribute harus berupa angka.',
            'digits_between'     => ':attribute harus antara :min sampai :max digit.',
            'date'               => 'Format tanggal pada :attribute tidak valid.',
            'after_or_equal'     => ':attribute tidak boleh tanggal yang sudah lewat.',
            'image'              => ':attribute harus berupa file gambar.',
            'mimes'              => 'Format :attribute harus jpeg, png, atau jpg.',
            'max.file'           => 'Ukuran :attribute maksimal adalah 2MB.',
            'waktu_ambil.after_or_equal'  => 'Jam operasional kami mulai pukul 09:00.',
            'waktu_ambil.before_or_equal' => 'Jam operasional kami berakhir pukul 21:00.',
        ], [
            // Alias Atribut agar lebih ramah
            'nama'        => 'nama pemesan',
            'no_wa'       => 'nomor WhatsApp',
            'tgl_ambil'   => 'tanggal pengambilan',
            'waktu_ambil' => 'waktu pengambilan',
            'bukti_bayar' => 'bukti pembayaran',
            'ucapan'      => 'kartu ucapan',
        ]);

        // Jika validasi gagal
        if ($validator->fails()) {
            return back()->withErrors($validator)->withInput();
        }

        try {
            db::beginTransaction();

            // 2. Simpan ke Tabel Pelanggan dulu
            $pelanggan = Pelanggan::create([
                'nama' => $request->nama,
                'no_wa' => $request->no_wa,
            ]);

            // 3. Handle File Upload Bukti Bayar
            $namaFile = null;
            if ($request->hasFile('bukti_bayar')) {
                $file = $request->file('bukti_bayar');
                // Membuat nama file unik berdasarkan waktu agar tidak tertimpa
                $namaFile = 'bukti_' . time() . $file->getClientOriginalExtension();
                // Pindahkan ke folder public/img/payment
                $file->move(public_path('img/payment/buket'), $namaFile);
            }

            $transaksi = TransaksiBuket::create([
                'id_pelanggan'     => $pelanggan->id_pelanggan,
                'id_buket'         => $request->id_buket,
                'tgl_ambil'        => $request->tgl_ambil . ' ' . $request->waktu_ambil,
                'request'          => $request->request_khusus, // Ubah dari request_khusus ke request
                'ucapan'           => $request->ucapan,
                'bukti_bayar'      => 'img/payment/' . $namaFile,
                'status_transaksi' => 'menunggu_verifikasi', // Ubah dari status ke status_transaksi
                'total_bayar'      => $buket->harga, // Tambahkan ini karena total_bayar wajib di fillable
                'no_invoice'       => 'INV-BUKET-' . strtoupper(\Illuminate\Support\Str::random(6)), // Tambahkan invoice sederhana
            ]);

            DB::commit();

            // 5. Membuat Pesan WhatsApp Otomatis
            $pesan = "Halo Admin Flo.do! Saya sudah melakukan pembayaran untuk invoice {$transaksi->no_invoice}:\n\n" .
                "*Data Pemesan:*\n" .
                "Nama: {$pelanggan->nama}\n" .
                "WA: {$pelanggan->no_wa}\n\n" .
                "*Detail Produk:*\n" .
                "Produk: {$transaksi->buket->nama}\n" .
                "Total: Rp " . number_format($transaksi->buket->harga, 0, ',', '.') . "\n\n" .
                "Mohon segera diproses, ya! Terima kasih.";

            $urlWA = "https://wa.me/6289673668516?text=" . urlencode($pesan);

            return redirect()->route('pesan.buket')->with([
                'success' => 'Pesanan Berhasil Dibuat!',
                'waUrl'   => $urlWA
            ]);
        } catch (\Exception $e) {
            DB::rollBack();
            return back()->with('error', 'Terjadi kesalahan: ' . $e->getMessage());
        }
    }
}
