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

namespace SanSystem
{
    /// <summary>
    /// 
    /// </summary>
    public partial class frmObjektEdit : Form
    {
        Inspektionsobjekt inspektionsobjekt = null;
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="inspektion"></param>
        public frmObjektEdit(Inspektionsobjekt inspektion)
        {
            InitializeComponent();


            btn_add_san.Text = Global.Instance.language.Labels["add_san"];
            btn_close.Text = Global.Instance.language.Labels["btn_close"];
            this.inspektionsobjekt = inspektion;

            dgv_schadenkuerzel.DataSource = inspektion.Schadenskuerzeln;

            foreach(Sanierung san in inspektion.Sanierung)
            {
                TabPage tab = new TabPage();
                if(san is InlinerSanierung)
                {
                    tab.Text = "InlinerSanierung";
                    UCInliner uCInliner = new UCInliner(san as InlinerSanierung);
                    uCInliner.Dock = DockStyle.Fill;
                    tab.Controls.Add(uCInliner);
                    tabControl1.TabPages.Add(tab);
                }
                else if(san is SchachtAnbindung)
                {
                    tab.Text = "Schachtanbindung";
                    UCSchachtanbindung uCSchachtanbindung = new UCSchachtanbindung(san as SchachtAnbindung);
                    uCSchachtanbindung.Dock = DockStyle.Fill;
                    tab.Controls.Add(uCSchachtanbindung);
                    tabControl1.TabPages.Add(tab);
                }
            }

            if (Environment.MachineName.Equals("MEVES-LT"))
            {
                this.Width = 1512;
                this.Height = 907;
            }
           
        }

        private void frmObjektEdit_Load(object sender, EventArgs e)
        {
            txt_objekt_name.Enabled = false;

            txt_laenge_schacht.DataBindings.Add(new Binding("Text", inspektionsobjekt, "Schachtlaenge"));
            txt_objekt_name.DataBindings.Add(new Binding("Text", inspektionsobjekt, "Objektbezeichnung"));
            txt_ort.DataBindings.Add(new Binding("Text", inspektionsobjekt, "OrtName"));
            txt_punkt_von.DataBindings.Add(new Binding("Text", inspektionsobjekt, "VonPunkt"));
            txt_punkt_bis.DataBindings.Add(new Binding("Text", inspektionsobjekt, "BisPunkt"));
            txt_strasse.DataBindings.Add(new Binding("Text", inspektionsobjekt, "StrasseName"));
            txt_hausnummer.DataBindings.Add(new Binding("Text", inspektionsobjekt, "Hausnummer"));
            cb_material.DataBindings.Add(new Binding("Text", inspektionsobjekt, "RohrMaterial"));
            txt_haltungslaenge.DataBindings.Add(new Binding("Text", inspektionsobjekt, "Haltungslaenge"));
            txt_dn.DataBindings.Add(new Binding("Text", inspektionsobjekt, "Kanalrohrweite"));
            txt_pro_nr.DataBindings.Add(new Binding("Text", inspektionsobjekt, "ProjektNummer"));
            dt_haltunggemessen_datum.DataBindings.Add(new Binding("Value", inspektionsobjekt, "HaltungGemessen"));
            txt_bemerkung.DataBindings.Add(new Binding("Text", inspektionsobjekt, "Bemerkung"));
            
        }

        private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            
        }


        private void btn_close_Click(object sender, EventArgs e)
        {
            int width = this.Width;
            int height = this.Height;

            txt_laenge_schacht.DataBindings.Clear();
            txt_objekt_name.DataBindings.Clear();

            txt_punkt_von.DataBindings.Clear();
            txt_punkt_bis.DataBindings.Clear();
            txt_strasse.DataBindings.Clear();
            txt_hausnummer.DataBindings.Clear();
            cb_material.DataBindings.Clear();
            txt_haltungslaenge.DataBindings.Clear();
            txt_dn.DataBindings.Clear();
            txt_pro_nr.DataBindings.Clear();
            dt_haltunggemessen_datum.DataBindings.Clear();
            txt_bemerkung.DataBindings.Clear();
            txt_ort.DataBindings.Clear();
            //MessageBox.Show(string.Format("width: {0} height: {1}", width, height));
            this.Close();
        }

        private void btn_add_san_Click(object sender, EventArgs e)
        {
            int mod = (int)Sanierungsarten.INLINER ^ (int)Sanierungsarten.SCHACHTANBINDUNG;
            FrmSelectNewSan frmSelectNewSan = new FrmSelectNewSan(mod);

            frmSelectNewSan.AddInlinerClicked += FrmSelectNewSan_AddInlinerClicked;
            frmSelectNewSan.AddSchachtAnbindungClicked += FrmSelectNewSan_AddSchachtAnbindungClicked;

            frmSelectNewSan.ShowDialog();
        }

        private void FrmSelectNewSan_AddSchachtAnbindungClicked(object sender, EventArgs e)
        {
            SchachtAnbindung schachtAnbindung = new SchachtAnbindung();
            schachtAnbindung.Datum = DateTime.Now;
            schachtAnbindung.Inspektionsobjekt = inspektionsobjekt;
            inspektionsobjekt.Sanierung.Add(schachtAnbindung);
            TabPage tab = new TabPage();
            tab.Text = "Schachtanbindung";
            UCSchachtanbindung uCSchachtanbindung = new UCSchachtanbindung(schachtAnbindung);
            uCSchachtanbindung.Dock = DockStyle.Fill;
            tab.Controls.Add(uCSchachtanbindung);
            tabControl1.TabPages.Add(tab);
        }

        private void FrmSelectNewSan_AddInlinerClicked(object sender, EventArgs e)
        {
            if(inspektionsobjekt.Sanierung.Count > 0)
            {
                foreach(Sanierung xsan in inspektionsobjekt.Sanierung)
                {
                    if(xsan is InlinerSanierung)
                    {
                        MessageBox.Show("Lustig Sie wollen einen Inliner in einem Inliner setzen?", "Lustig", MessageBoxButtons.OK, MessageBoxIcon.Question);
                        return;
                    }
                }
            }
            InlinerSanierung san = new InlinerSanierung();
            san.Inspektionsobjekt = inspektionsobjekt;
            san.Datum = new DateTime(2018, 01, 01, 12, 00, 00);
            inspektionsobjekt.Sanierung.Add(san);
            TabPage tab = new TabPage();
            tab.Text = "InlinerSanierung";
            UCInliner uCInliner = new UCInliner(san);
            uCInliner.Dock = DockStyle.Fill;
            tab.Controls.Add(uCInliner);
            tabControl1.TabPages.Add(tab);
        }

        private void btn_delete_Click(object sender, EventArgs e)
        {
            Datenbank.Instance.loadedProjekt.Objekte.Remove(inspektionsobjekt);
        }

        private void cb_objekname_man_CheckedChanged(object sender, EventArgs e)
        {
            txt_objekt_name.Enabled = cb_objekname_man.Checked;
        }

        private void txt_punkt_von_TextChanged(object sender, EventArgs e)
        {
            if(!cb_objekname_man.Checked)
            {
                txt_objekt_name.DataBindings.Clear();
                inspektionsobjekt.Objektbezeichnung = txt_punkt_von.Text;
                txt_objekt_name.DataBindings.Add(new Binding("Text", inspektionsobjekt, "Objektbezeichnung"));
            }
        }

        private void dgv_schadenkuerzel_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
#if !DEBUG
            return;
#endif
            DataGridView dataGridView = (DataGridView)sender;
            if (dataGridView == null) return;
            DataGridViewSelectedRowCollection dataGridViewRowsSelect = dataGridView.SelectedRows;


            if (dataGridViewRowsSelect.Count > 1) return;

            DataGridViewRow dgvr = dataGridViewRowsSelect[0];
            Inspektionskuerzeln kuerzel = (dgvr.DataBoundItem as Inspektionskuerzeln);
            if (kuerzel == null) return;
            if (kuerzel.Sanierungskonzepts == null)
                kuerzel.Sanierungskonzepts = new SanierungskonzeptCollection();

            
            FrmSanKonzeptList frmSanKonzept = new FrmSanKonzeptList(kuerzel.Sanierungskonzepts);
            //frmSanKonzept.MdiParent = this.MdiParent;
            frmSanKonzept.ShowDialog();
        }
    }
}
