using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace Baza_Reklam
{
    public partial class KalendarzEmisji : Form
    {
        string tytul;

        readonly REKLAMADataSet.REKLAMARow reklama;

        REKLAMADataSet.UKAZE_SIE_W_NRDataTable emisje;

        public REKLAMADataSet.UKAZE_SIE_W_NRDataTable Emisje
        {
            get { return emisje; }
            set { emisje = value; }
        }

        readonly short emisjaDoZmiany;
        short? nowaEmisja;

        int iloscEmisji;
        int index = -1;

        //TODO: tu trzeba bedzie wymyslec cos lepszego
        public DateTime dataOstatatniejZafakturowanejEmisji = DateTime.Parse("2008-12-30");

        #region properties

        public short? NowaEmisja
        {
            get { return nowaEmisja; }
            set { nowaEmisja = value; }
        }

        private string Tytul
        {
            get { return tytul; }
            set { tytul = value; }
        }

        #endregion properties

        public KalendarzEmisji(REKLAMADataSet.REKLAMARow reklama, REKLAMADataSet.UKAZE_SIE_W_NRDataTable emisje)
        {
            InitializeComponent();
            Tytul = reklama.TYTUŁ;
            label1.Text = reklama.TYTUŁ;
            this.reklama = reklama;
            this.emisje = emisje;

            foreach (DataRow r in emisje.Rows)
            {
                if (r.RowState != DataRowState.Deleted)
                {
                    iloscEmisji++;
                }
            }

            label2.Text = iloscEmisji.ToString();

            dodajButton.Click += dodajButton_Click;

        }


        public KalendarzEmisji(REKLAMADataSet.REKLAMARow reklama, REKLAMADataSet.UKAZE_SIE_W_NRDataTable emisje, short emisjaDoZmiany)
        {
            InitializeComponent();
            Tytul = reklama.TYTUŁ;
            label1.Text = reklama.TYTUŁ;
            dodajButton.Text = "Zmień";

            this.reklama = reklama;
            this.emisje = emisje;

            this.emisjaDoZmiany = emisjaDoZmiany;

            dodajButton.Click += zmienButton_Click;
        }


        private void KalendarzEmisji_Load(object sender, EventArgs e)
        {
            nRTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            zamowieniaTableAdapter.Connection.ConnectionString = ConnString.getConnString().Value;
            DateTime startDay = DateTime.Today;

            nRTableAdapter.FillByTytulData(sLOWNIKDataSet.NR, Tytul, startDay);
                       
            short nr = Emisje.MaxZafakturowanyNrWydania();
  
            if (nr != 0)
            {
                dataOstatatniejZafakturowanejEmisji = sLOWNIKDataSet.NR.dataWydania(Tytul, nr);
            }

            nRDataGridView.CellValueChanged += nRDataGridView_CellValueChanged;
            nRDataGridView.CellContentClick += nRDataGridView_CellContentClicked;
        }

        private void dodajButton_Click(object sender, EventArgs e)
        {
            foreach (DataGridViewRow row in nRDataGridView.Rows)
            {
                if (row.Cells[3].Value != null && ((bool)row.Cells[3].Value))
                {
                    if (row.DefaultCellStyle.BackColor == Color.LightYellow)
                    {
                        REKLAMADataSet.UKAZE_SIE_W_NRRow em =
                        emisje.NewUKAZE_SIE_W_NRRow();

                        em.ReklamaId = reklama.ReklamaID;
                        em.dataDodania = DateTime.Today;
                        em.Nr_Wydania = Convert.ToInt16(row.Cells[0].Value);

                        emisje.AddUKAZE_SIE_W_NRRow(em);

                        if(!reklama.IsidZamowieniaNull())
                        {
                            //ustaw pole zafakturowanowszystko na false
                            REKLAMADataSet.zamowieniaDataTable zamowieniaDataTable = new REKLAMADataSet.zamowieniaDataTable();
                            zamowieniaTableAdapter.FillByIdZamowienia(zamowieniaDataTable, reklama.idZamowienia);
                            REKLAMADataSet.zamowieniaRow zamowieniaRow = (REKLAMADataSet.zamowieniaRow)zamowieniaDataTable.Rows[0];
                            zamowieniaRow.zafakturowanoWszystko = false;
                            zamowieniaRow.EndEdit();
                            zamowieniaTableAdapter.Update(zamowieniaRow);
                        }
                    }
                }
            }
        }

        private void zmienButton_Click(object sender, EventArgs e)
        {
            //foreach (REKLAMADataSet.UKAZE_SIE_W_NRRow r in emisje)
            //{
            //    if (r.RowState != DataRowState.Deleted)
            //    {
            //        if (r.Nr_Wydania == emisjaDoZmiany && nowaEmisja.HasValue)
            //        {
            //            r.Nr_Wydania = nowaEmisja.Value;
            //            r.EndEdit();
            //            break;
            //        }
            //    }
            //}
            nowaEmisja = GetNewIssueNumber();

        }

        private short? GetNewIssueNumber()
        {
            short? newIssueNumer = null;
            bool? isIssueChecked;

            foreach (DataGridViewRow row in nRDataGridView.Rows)
            {
                if (row.ReadOnly || (row.DefaultCellStyle.BackColor != Color.White && row.DefaultCellStyle.BackColor != Color.LightYellow)) continue;

                isIssueChecked = (bool?)row.Cells[3].Value;
                if (!isIssueChecked.HasValue || !isIssueChecked.Value) continue;

                newIssueNumer = (short)row.Cells[0].Value;
                break;
            }

            return newIssueNumer;
        }

        private void nRDataGridView_CellContentClicked(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0) return;

            if (nRDataGridView.Rows[e.RowIndex].ReadOnly) return;

            if (e.ColumnIndex != 3) return;

            if (nRDataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor == Color.White)
            {
                if (emisjaDoZmiany != 0 && index != -1)
                {
                    nRDataGridView.Rows[index].Cells[3].Value = false;
                    nRDataGridView.Rows[index].DefaultCellStyle.BackColor = Color.White;
                }

                nowaEmisja = (short) nRDataGridView.Rows[e.RowIndex].Cells[0].Value;
                index = e.RowIndex;

                nRDataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LightYellow;
            }
            else
            {
                nowaEmisja = (short) nRDataGridView.Rows[e.RowIndex].Cells[0].Value;
                index = e.RowIndex;

                nRDataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
            }
            nRDataGridView.EndEdit();
        }

        private void nRDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex != 3) return;

            if (((bool) nRDataGridView[e.ColumnIndex, e.RowIndex].Value))
                iloscEmisji++;
            else
                iloscEmisji--;

            label2.Text = iloscEmisji.ToString();
        }

        private void nRDataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (e.ListChangedType != ListChangedType.Reset) return;

            foreach (DataGridViewRow row in nRDataGridView.Rows)
            {
                row.DefaultCellStyle.BackColor = Color.White;

                row.Cells[2].Value = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames
                    [(int) Convert.ToDateTime(row.Cells[1].Value).DayOfWeek];

                DataRow[] table = emisje.Select("[Nr Wydania]=" + row.Cells[0].Value);

                if (table != null && table.Length > 0)
                {
                    row.ReadOnly = true;
                    row.Cells[3].Value = true;
                    row.DefaultCellStyle.BackColor = Color.WhiteSmoke;

                    REKLAMADataSet.UKAZE_SIE_W_NRRow em =
                        (REKLAMADataSet.UKAZE_SIE_W_NRRow) table[0];

                    if (Convert.ToDateTime(row.Cells[1].Value) < DateTime.Today)
                    {
                        row.DefaultCellStyle.BackColor = Color.MintCream;
                    }
                    else
                    {
                        if (em.zafakturowana)
                        {
                            row.DefaultCellStyle.BackColor = Color.LightGray;
                        }

                        //anulowana
                        if (em.status == 2)
                        {
                            row.DefaultCellStyle.ForeColor = Color.Red;
                        }

                        if (emisjaDoZmiany == (short) row.Cells[0].Value)
                        {
                            row.DefaultCellStyle.BackColor = Color.MistyRose;
                        }
                    }
                }
                else if (emisjaDoZmiany == 0)
                {
                    //emisja nie została wcześniej wybrana, ale jej misiąc już
                    // jest zafakturowany
                    DateTime dataWydania = (DateTime) row.Cells[1].Value;
                    if (dataWydania.Year <= dataOstatatniejZafakturowanejEmisji.Year
                        &&
                        dataWydania.Month <= dataOstatatniejZafakturowanejEmisji.Month)
                    {
                        row.ReadOnly = true;
                        row.DefaultCellStyle.BackColor = Color.LightGray;
                    }
                }
            }
        }
    }
}