using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using reservasi_hotel.Database;


namespace reservasi_hotel
{
    public partial class form_reservasi : Form
    {
        private int id_reservasiroom = 0;
        public form_reservasi()
        {
            InitializeComponent();
        }

        private void tbreserve_Click(object sender, EventArgs e)
        {
            Console.WriteLine("Reservation process started.");

            if (!ValidateInput())
                return;

            string nama_pengguna = tbusn.Text;
            string atas_nama = tbatasnama.Text;
            string alamat = tbaddress.Text;
            string telp = tbtelp.Text;
            string dipesan_oleh = tbmadeby.Text;
            string nama_tipe = cbtipe.SelectedItem.ToString();
            string no_kamar = cbnum.SelectedItem.ToString();
            DateTime tgl_masuk = dtin.Value;
            DateTime tgl_keluar = dtout.Value;
            string catatan = tbnote.Text;

            try
            {
                using (SqlConnection conn = DatabaseHelper.GetConnection())
                {
                    conn.Open();
                    string query = @"
                        INSERT INTO reservasi_room
                        (nama_pengguna, atas_nama, alamat, telp, dipesan_oleh, nama_tipe, no_kamar, tgl_masuk, tgl_keluar, catatan) 
                        VALUES 
                        (@nama_pengguna, @atas_nama, @alamat, @telp, @dipesan_oleh, @nama_tipe, @no_kamar, @tgl_masuk, @tgl_keluar, @catatan);

                        SELECT SCOPE_IDENTITY() AS LastID;";

                    using (SqlCommand cmd = new SqlCommand(query, conn))
                    {
                        cmd.Parameters.AddWithValue("@nama_pengguna", nama_pengguna);
                        cmd.Parameters.AddWithValue("@atas_nama", atas_nama);
                        cmd.Parameters.AddWithValue("@alamat", alamat);
                        cmd.Parameters.AddWithValue("@telp", telp);
                        cmd.Parameters.AddWithValue("@dipesan_oleh", dipesan_oleh);
                        cmd.Parameters.AddWithValue("@nama_tipe", nama_tipe);
                        cmd.Parameters.AddWithValue("@no_kamar", no_kamar);
                        cmd.Parameters.AddWithValue("@tgl_masuk", tgl_masuk);
                        cmd.Parameters.AddWithValue("@tgl_keluar", tgl_keluar);
                        cmd.Parameters.AddWithValue("@catatan", catatan);

                        Console.WriteLine($"Executing query: {query}");

                        // Execute the query to insert reservation and retrieve last inserted ID
                        // Execute the query to insert reservation and retrieve last inserted ID
                        object lastIdObj = cmd.ExecuteScalar();

                        if (lastIdObj != null && lastIdObj != DBNull.Value)
                        {
                            id_reservasiroom = Convert.ToInt32(lastIdObj);
                            MessageBox.Show("Reservation successful!");
                            ClearForm();

                            // Hide current form and show payment form with reservation ID
                            this.Hide();
                            form_pembayaran f6 = new form_pembayaran(id_reservasiroom);
                            f6.Show();
                        }
                        else
                        {
                            MessageBox.Show("Failed to retrieve reservation ID. Please contact support.");
                        }
                    }

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error: {ex.Message}");
                Console.WriteLine($"Error: {ex.Message}");
            }
        }

        private bool ValidateInput()
        {
            // Validate all necessary fields for reservation
            if (string.IsNullOrWhiteSpace(tbusn.Text) ||
                string.IsNullOrWhiteSpace(tbatasnama.Text) ||
                string.IsNullOrWhiteSpace(tbaddress.Text) ||
                string.IsNullOrWhiteSpace(tbtelp.Text) ||
                cbtipe.SelectedItem == null ||
                cbnum.SelectedItem == null)
            {
                MessageBox.Show("Please fill in all fields.");
                return false;
            }
            if (dtin.Value.Date < DateTime.Now.Date)
            {
                MessageBox.Show("Check-in date cannot be in the past.");
                return false;
            }

            if (dtout.Value.Date <= dtin.Value.Date)
            {
                MessageBox.Show("Check-out date must be later than the check-in date.");
                return false;
            }

            return true;
        }


        private void ClearForm()
        {
            tbusn.Clear();
            tbatasnama.Clear();
            tbaddress.Clear();
            tbtelp.Clear();
            cbtipe.SelectedIndex = 0; // Reset dropdown selection
            cbnum.SelectedIndex = 0;
            dtin.Value = DateTime.Now; // Set to current date
            dtout.Value = DateTime.Now; // Set to current date
            tbnote.Clear();
        }

        private void btclear_Click(object sender, EventArgs e)
        {
            ClearForm();

        }

        private void btcancel_Click(object sender, EventArgs e)
        {
            this.Hide();
            form_login f2 = new form_login();
            f2.Show();
        }
    }
}