using System;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using Baza_Reklam.Classes.Helpers;
using Baza_Reklam.Classes.Interfaces;

namespace Baza_Reklam
{
    public partial class ZestawienieZamowienForm : Form, IForm
    {

        private static ZestawienieZamowienForm form;
        private bool commandExecuted;

        public static ZestawienieZamowienForm GetZestawienieZamowienForm(MDIBazaReklam parent)
        {
            if (form == null){
                form = new ZestawienieZamowienForm(parent);
            }
            return form;
        }

        private ZestawienieZamowienForm(Form parent)
        {
            InitializeComponent();

            MdiParent = parent;

            //generuje piersze węzły w drzewie
            generateNodes();
       }

        private void FacturesForm_Load(object sender, EventArgs e)
        {
            WindowState = FormWindowState.Maximized;
            DBBindings.bindujAgencje(agencjaToolStripComboBox);
        }

        private void generateNodes()
        {
            TreeNode node = new TreeNode("Biura");
            node.Nodes.Add(new TreeNode());
            node.Name = "Biura";
            treeView1.Nodes.Add(node);
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (e.Node == null || e.Node.Level != 3) return;

            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
            cmd.Connection = new SqlConnection(ConnString.getConnString().Value);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.CommandText = "sp_GetZestawienieZamowien";
            cmd.Parameters.Clear();

            switch (e.Node.Parent.Parent.Parent.Name)
            {
                case "Biura":
                    Cursor = Cursors.WaitCursor;

                    rEKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWE.Clear();
                    cmd.Parameters.AddWithValue("@agent", e.Node.Name);
                    dataAdapter.Fill(rEKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWE);
                    commandExecuted = true;
                    fakturyDataGridView.Refresh();

                    Cursor = Cursors.Default;
                    break;
                default:
                    break;
            }
        }

        private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
        {
            TreeNode node;

            if (e.Node != null)
            {
               switch (e.Node.Level)
                {
                    case 0:
                        switch (e.Node.Name)
                        {
                            case "Biura":
                                DBBindings.dodajAgencjeDoWezla(e.Node);
                                break;
                        }  
                        break;
                    case 1:
                        switch (e.Node.Parent.Name)
                        {
                            case "Biura":
                                e.Node.Nodes.Clear();

                                node = new TreeNode("Agenci");
                                node.Name = "Agenci";
                                e.Node.Nodes.Add(node);
                                DBBindings.dodajAgentowDoWezla(node, e.Node.Name);
                                break;
                        }
                        break;
                    default:
                        break;
                }
            }
        }
       
        private void wyszukajToolStripButton_Click(object sender, EventArgs e)
        {
            wyszukajToolStrip.Visible = wyszukajToolStrip.Visible ? false : true;
        }


        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            PrintDGV.Print_DataGridView(fakturyDataGridView,50);
        }

        private void wyczyscPolaToolStripButton_Click(object sender, EventArgs e)
        {
            nrZamToolStripTextBox.Clear();
            agencjaToolStripComboBox.SelectedIndex = -1;
            kodKlientaToolStripTextBox.Clear();
            rokToolStripTextBox.Clear();
            kodRozliczeniowyToolStripTextBox.Clear();
            txtMiesiac.Clear();
         }

        /// <summary>
        /// Przechodzi do okna KLIENCI i wyświetla dane klienta związanego z  fakturą.
        /// </summary>
        private void klientToolStripButton_Click(object sender, EventArgs e)
        {

            if (VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource.Current != null)
            {
                DataRowView row = (DataRowView)VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource.Current;

                int custID = Convert.ToInt32(row["idKlienta"]);

                ClientsForm.getClientsForm((MDIBazaReklam)MdiParent).pokazKlienta(custID);

                Hide();

                ClientsForm.getClientsForm((MDIBazaReklam)MdiParent).Show();

            }   
        }

        private void FacturesForm_Shown(object sender, EventArgs e)
        {
            rokToolStripTextBox.Text = DateTime.Today.Year.ToString();
          
            if (User.Instance().IsKierownik)
            {
               agencjaToolStripComboBox.Text = User.Instance().SymbolAgencji;
            }
            else if (User.Instance().IsHandlowiec)
            {
               kodRozliczeniowyToolStripTextBox.Text = User.Instance().Kod_agenta;
            }            
        }

        private void excelToolStripButton_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;

            ExcelHelper ex = new ExcelHelper();
            ex.Export(fakturyDataGridView);

            Cursor = Cursors.Default;
        }

        private void VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource_CurrentChanged(object sender, EventArgs e)
        {
            if (VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource.Current == null) return;
            
            DataRowView row = (DataRowView)VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource.Current;
            REKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWERow zam =
                (REKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWERow)row.Row;

            reklamyZestawienieTableAdapter.FillByIdZamowienia(
                rEKLAMADataSet.ReklamyZestawienie,zam.idZamowienia);

        }

        private void zamowieniaToolStripButton_Click(object sender, EventArgs e)
        {
            if (VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource.Current != null)
            {
                DataRowView row = (DataRowView)VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource.Current;

                REKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWERow zam =
                (REKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWERow)row.Row;

                ZamowieniaForm zf = new ZamowieniaForm(zam.idKlienta,zam.idZamowienia);
                zf.ShowDialog();
            }
        }

        private void odswiezToolStripButton_Click(object sender, EventArgs e)
        {
            if (commandExecuted)
            {
                Cursor = Cursors.WaitCursor;

                rEKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWE.Clear();

                try
                {
                    BindZestawienieZamowien();
                }
                finally 
                {
                    Cursor = Cursors.Default;
                }
            }
        }

        private void zamToolStripButton_Click(object sender, EventArgs e)
        {

            if (reklamyZestawienieBindingSource.Current != null)
            {
                DataRowView row = (DataRowView)reklamyZestawienieBindingSource.Current;

                if (row["reklamaId"] != DBNull.Value)
                {
                    int idRek = Convert.ToInt32(row["reklamaId"]);

                    OrderDetails.getOrderDetails().PokazSzczegolyZamowienia(idRek);
                    OrderDetails.getOrderDetails().ShowDialog();
                }
            }

        }

        private void szukajToolStripButton_Click(object sender, EventArgs e)
        {
            Cursor = Cursors.WaitCursor;
            try
            {
                BindZestawienieZamowien();
            }
            finally
            {
                treeView1.CollapseAll();
                treeView1.SelectedNode = null;
                Cursor = Cursors.Default;
            }
        }

        private void BindZestawienieZamowien()
        {
            SqlCommand cmd = new SqlCommand();
            SqlDataAdapter dataAdapter = new SqlDataAdapter(cmd);
            cmd.CommandText = "sp_GetZestawienieZamowien";
            cmd.CommandType = CommandType.StoredProcedure;

            rEKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWE.Clear();
            rEKLAMADataSet.ReklamyZestawienie.Clear();

            cmd.Parameters.Clear();

            if (nrZamToolStripTextBox.Text.Trim() != "")
            {
                int i;
                if (!Int32.TryParse(nrZamToolStripTextBox.Text.Trim(), out i))
                {
                    MessageBox.Show("Podaj prawidłowy numer zamówienia.");
                    return;
                }
                cmd.Parameters.AddWithValue("@nrZamowienia", nrZamToolStripTextBox.Text.Trim());
            }

            if (rokToolStripTextBox.Text.Trim() != "")
            {
                int i;
                if (!Int32.TryParse(rokToolStripTextBox.Text.Trim(), out i))
                {
                    MessageBox.Show("Podaj prawidłowy rok.");
                    return;
                }
                cmd.Parameters.AddWithValue("@rokZamowienia", rokToolStripTextBox.Text.Trim());
            }

            if (txtMiesiac.Text.Trim() != "")
            {
                int i;
                if (!Int32.TryParse(txtMiesiac.Text.Trim(), out i) || i > 12 || i <= 0)
                {
                    MessageBox.Show("Podaj prawidłowy miesiąc.");
                    return;
                }
                cmd.Parameters.AddWithValue("@miesiacZamowienia", txtMiesiac.Text.Trim());
            }

            if (kodRozliczeniowyToolStripTextBox.Text.Trim() != "")
                cmd.Parameters.AddWithValue("@kodAgenta", kodRozliczeniowyToolStripTextBox.Text.Trim());

            if (kodKlientaToolStripTextBox.Text.Trim() != "")
                cmd.Parameters.AddWithValue("@kodKlienta", kodKlientaToolStripTextBox.Text.Trim());

            if (agencjaToolStripComboBox.Text.Trim() != "")
                cmd.Parameters.AddWithValue("@agencja", agencjaToolStripComboBox.Text.Trim());

            dataAdapter.SelectCommand = cmd;

            dataAdapter.SelectCommand.Connection = new SqlConnection(ConnString.getConnString().Value);
            dataAdapter.Fill(rEKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWE);
            commandExecuted = true;
        }

        private void podsumuj()
        {

            if (VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource.List.Count != 0)
            {
                decimal nettoZFV = Convert.ToDecimal(rEKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWE.Compute("Sum(nettoZafakturowane)", ""));
                decimal nettoBezFV = Convert.ToDecimal(rEKLAMADataSet.VIEW_ZESTAWIENIE_ZAMOWIEN_NOWE.Compute("Sum(DoZafakturowania)", ""));
                                
                wartoscNettoNiezafakturowanaTextBox.Text = String.Format("{0:C}", nettoBezFV);
                wartoscNettoZafakturowanaTextBox.Text = String.Format("{0:C}", nettoZFV);
            }
            else
            {
                wartoscNettoNiezafakturowanaTextBox.Clear();
                wartoscNettoZafakturowanaTextBox.Clear();
            }
        }

        private void VIEW_ZESTAWIENIE_ZAMOWIEN_NOWEBindingSource_ListChanged(object sender, ListChangedEventArgs e)
        {
            podsumuj();
        }

        private void fakturyDataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            foreach (DataGridViewRow row in fakturyDataGridView.Rows)
            {
                DataRowView r = (DataRowView)row.DataBoundItem;

                if (Convert.IsDBNull(r.Row["DoZafakturowania"])) continue;
            }
        }

        private void szukaj_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13) szukajToolStripButton.PerformClick();
        }

        public void CloseForm()
        {
            form = null;
        }
    }
}