using System;
using System.Collections.Generic;
using System.Windows.Forms;
using BookShop.View.Dialogs;
using BookShop.Control;
using BookShop.Model;

namespace BookShop.View
{
    /// <summary>
    /// A fő ablakunk, menüsorral.
    /// 
    /// A "partial" kulcsó azt jelzi hogy más fájl(ok)ban is szerepelhet még ugyanennek az osztálynak
    /// kódja. A Visual Studio így választja ketté a generált kódtól a kézzel hozzáírtat.
    /// </summary>
    public partial class BookShopGui : Form
    {
        private BookShopControl control;

        /// <summary>
        /// Az "internal" kulcsszó hatására csak ez a program (assembly) látja
        /// ezt a property-t. Nincs definiálva setter, ezért csak olvasni lehet
        /// az értéket!
        /// </summary>
        internal BookShopControl Controller { get {return control;} }

        public BookShopGui(BookShopControl control)
        {
            this.control = control;
            InitializeComponent();
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void newCustomerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AddCustomerDialog dialog = new AddCustomerDialog(this);
            dialog.ShowDialog();
        }

        private void listCustomersToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IEnumerable<Customer> customers = control.GetCustomerList();

            //foreach (Customer customer in customers)
            //{
            //    Console.WriteLine(customer);
            //}

            // a datagridview csak IList interfészt megvalósító osztállyal
            // működik, ezért ha nem ilyen kapunk, akkor átalakítjuk

            // az is kulcsszó megvizsgálja, hogy a bal oldali operandus
            // a jobb oldalinak leszármazottja-e
            // (interfész megvalósítását is leszármazásnak értelmezzük)

            if (!(customers is IList<Customer>))
                // a list megvalósítja az IList interfészt
                customers = new List<Customer>(customers);

            customersDGV.DataSource = customers;
            customersDGV.Visible = true;
        }

        private void newBookToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AddBookDialog dialog = new AddBookDialog(this);
            dialog.ShowDialog();
        }

        private void listBooksToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // frissítjük az adatokat
            dataGridViewBooks.DataSource = control.GetAvailableBookList();
            // és megjelenítjük
            dataGridViewBooks.Visible = true;
        }

        private void sellBookToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (SellBookDialog dialog = new SellBookDialog(this))
            {
                dialog.ShowDialog();
            }
        }

        private void soldBooksToolStripMenuItem_Click(object sender, EventArgs e)
        {
            soldBooksDGV.DataSource = control.GetSoldBooks();
            soldBooksDGV.Visible = true;
        }
    }
}