Alur Penggunaan Website

Melihat Menu dan Memesan Makanan:
    Pengguna akan melihat daftar makanan dan minuman yang tersedia saat pertama kali mengakses website.
    Mereka dapat memfilter menu berdasarkan kategori (misalnya, makanan, minuman).
    Pengguna menambahkan item yang diinginkan ke keranjang belanja mereka. Jumlah item di keranjang akan diperbarui secara real-time.

Review Keranjang (Tahap 1 - Sederhana):
    Pengguna dapat membuka tampilan keranjang (biasanya sidebar atau modal).
    Di sini, mereka akan melihat ringkasan pesanan mereka: daftar item yang dipilih beserta kuantitas, harga per item, dan total harga keseluruhan.
    Hanya ada satu tombol untuk melanjutkan: "Lanjut Pembayaran".

Detail Checkout (Tahap 2 - Modal Baru):
    Setelah mengklik "Lanjut Pembayaran", sebuah modal atau sidebar baru akan muncul.
    Pemilihan Meja:
        Pengguna memilih apakah mereka "Pelanggan Baru" (memilih meja yang tersedia) atau "Sudah Ada Meja" (memilih meja yang sudah terisi).
        Mereka memasukkan "Nama Pemesan". Daftar meja yang tersedia atau terisi akan ditampilkan secara real-time dari Firebase Realtime Database.
    Pemilihan Metode Pembayaran:
        Pengguna memilih metode pembayaran menggunakan radio button yang dikelompokkan:
            Pembayaran Otomatis: Midtrans (disertai logo Midtrans)
            Pembayaran Manual: Tunai (disertai logo tunai) atau QRIS (disertai logo QRIS)
    Input Email (Opsional): Pengguna dapat memasukkan alamat email mereka (defaultnya guest@gmail.com) untuk menerima struk pembelian.
    Konfirmasi Akhir: Satu tombol "Bayar" (atau "Konfirmasi Pesanan") akan memicu proses pembayaran.

Proses Pembayaran:
    Pencatatan Pesanan Terpusat (Awal): Terlepas dari metode pembayarannya, pesanan akan dicatat ke dalam satu tabel pesanan utama di database Anda (misalnya, tabel orders) dengan status awal (misalnya, 'pending' atau 'menunggu_konfirmasi'). Detail item pesanan akan disimpan di tabel terkait (misalnya, order_items). Tabel ini berfungsi sebagai bukti pembelian universal.

    Alur Midtrans:
        Sistem memanggil API Midtrans untuk mendapatkan token Snap.
        Pengguna diarahkan ke halaman pembayaran Midtrans.
        Setelah pembayaran berhasil di Midtrans:
            Midtrans akan mengirimkan notifikasi (melalui callback URL atau Webhook) ke endpoint server Anda.
            Endpoint ini akan memproses notifikasi tersebut dan mengubah status pesanan di tabel orders menjadi 'dibayar' atau 'terkonfirmasi'.
            Pengguna akan melihat konfirmasi pembayaran berhasil (misalnya, melalui modal atau halaman sederhana di browser mereka).
            Pesanan ini segera ditampilkan secara real-time di halaman daftar order dapur.

    Alur Pembayaran Manual (Tunai/QRIS):
        Status pesanan di tabel orders akan tetap pada status awal (misalnya, 'menunggu_konfirmasi_manual').
        Pengguna akan menerima instruksi untuk melakukan pembayaran di kasir secara manual.
        Konfirmasi oleh Staf: Di sisi staff/kasir, ada antarmuka terpisah di mana staf akan memverifikasi pembayaran manual dan secara manual mengubah status pesanan menjadi 'terkonfirmasi' di sistem.
        Setelah dikonfirmasi oleh staf:
            Status pesanan di tabel orders diperbarui menjadi 'terkonfirmasi'.
            Pesanan ini kemudian ditampilkan secara real-time di halaman daftar order dapur.

Pembaruan Status Meja Real-time:
    Setelah pesanan terkonfirmasi (baik oleh Midtrans atau oleh staf untuk pembayaran manual), status meja di Firebase akan diperbarui secara real-time. Meja akan ditandai sebagai aktif/terisi, dan nama pemesan akan dicatat sebagai reserved_by.
    Sistem juga akan menyinkronkan data meja terbaru dari Firebase untuk semua pengguna.

Konfirmasi dan Email Struk:
    Pengguna akan menerima notifikasi di layar bahwa pesanan berhasil dikirim/dibayar.
    Jika email dimasukkan, struk pembelian lengkap yang berisi detail makanan, total harga, dan detail meja akan dikirimkan ke email tersebut. Data struk ini akan diambil dari tabel pesanan terpusat.

Reset Keranjang dan Status:
    Keranjang belanja akan dikosongkan, dan status formulir akan diatur ulang untuk pesanan berikutnya.
