using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Xml;
using XMLExtractor;

namespace XMLExtractor
{
    public class Section {
        public string id { get; set; }
        public int idCapitolo { get; set; }
        public int idSezione { get; set; }

        public static void writeSection(XmlNode attribute, List<string> tagList, string nextTag, Data data)
        {
            //ReadXML.idPagina = 1;
            foreach (XmlNode attr in attribute.ChildNodes)
                if (!tagList.Contains(attr.Name.ToString()))
                {
                    Section section = new Section();
                    section.id = attr.InnerText;
                    section.idCapitolo = ReadXML.idCapitolo;
                    section.idSezione = ReadXML.idSezione;
                    data.sectionList.Add(section);
                }
                else
                    ReadXML.extractTag(attr, "pagina");
            ReadXML.idSezione++;
        }

        public void writeDB(SqlConnection conn, Data data, TemplateStrutturaModelli templateStrutturaModelli) { 
            //  Le sezioni di Immobiliare Monitoraggio su DB partono da 201 (compreso)
            //  I dati sono estratti dallXML con indice che parte da 1
            int rowsUpdatedInserted = 0;
            //conn.Open();
            SqlCommand updInsCommand;
            SqlCommand cmdCount = new SqlCommand("SELECT count(*) from Sezioni WHERE ID = @ID", conn);
            cmdCount.Parameters.AddWithValue("@ID", Utility.CHIAVE_LAYOUT_SECTION + 200);
            int count = (int)cmdCount.ExecuteScalar();

            // Se esiste, faccio l'update, altrimenti creo una nuova riga
            if (count > 0)
                updInsCommand = new SqlCommand("UPDATE Sezioni SET Descrizione = @descrizione WHERE ID = @ID", conn);
            else
                updInsCommand = new SqlCommand("INSERT into Sezioni (ID, Descrizione) VALUES (@ID, @Descrizione)", conn);

            string Descrizione = "S" + Utility.CHIAVE_LAYOUT_SECTION/*this.idCapitolo*/ + "." + this.id + ".MonitoraggioImmobiliare";
            updInsCommand.Parameters.AddWithValue("@ID", Utility.CHIAVE_LAYOUT_SECTION + 200);
                    updInsCommand.Parameters.AddWithValue("@Descrizione", Descrizione);
                    rowsUpdatedInserted = updInsCommand.ExecuteNonQuery();
                    //if (rowsUpdatedInserted != 0)
                     //   this.idSezione = Utility.CHIAVE_LAYOUT_SECTION + 200;
                    templateStrutturaModelli.idSezione = Utility.CHIAVE_LAYOUT_SECTION + 200;
                    Chapter chapter = (Chapter) data.chapterList.AsEnumerable().FirstOrDefault(x => x.idCapitolo == this.idCapitolo);
                    if (chapter != null)
                    {
                        //chapter.idCapitolo = this.idSezione;
                        chapter.writeDB(conn, templateStrutturaModelli);
                    }
                    
                    if (rowsUpdatedInserted > 0)
                        writeChiaveLayoutDB(conn, data, templateStrutturaModelli);

                    Utility.CHIAVE_LAYOUT_SECTION++;
             
        }

        // Scrive in ClassiLayout le chiavi layout dei Capitoli
        public void writeChiaveLayoutDB(SqlConnection conn, Data data, TemplateStrutturaModelli templateStrutturaModelli)
        {
            Chapter chapter = (Chapter) data.chapterList.AsEnumerable().FirstOrDefault(x => x.idCapitolo == this.idCapitolo);
            SqlCommand updInsCommand;
            SqlCommand cmdCount = new SqlCommand("SELECT count(*) from ClassiLayout WHERE IdChiaveLayout = @idChiaveLayout", conn);
            cmdCount.Parameters.AddWithValue("@idChiaveLayout", Utility.CHIAVE_LAYOUT_SECTION + 3500);

            // INSERT STATEMENT
            updInsCommand = new SqlCommand("INSERT into ClassiLayout (IdChiaveLayout, Classe, Namespace, Descrizione) VALUES (@idChiaveLayout, "
                + "@classe, @NameSpace, @Descrizione)", conn);

            // idChiaveLayout parte da 526 => 'Immobiliare Monitoraggio'
            //updInsCommand.Parameters.AddWithValue("@ID", Convert.ToInt32(new SqlCommand("SELECT MAX(ID) FROM Report", conn).ExecuteScalar()));
            updInsCommand.Parameters.AddWithValue("@IdChiaveLayout", Utility.CHIAVE_LAYOUT_SECTION + 3500);
            if (!chapter.titoloCapitolo.Contains("Indice"))
            {
                updInsCommand.Parameters.AddWithValue("@classe", "S" + Utility.CHIAVE_LAYOUT_SECTION);
                updInsCommand.Parameters.AddWithValue("@NameSpace", "Consulenza.ReportWriter.Manager.Section.Immobiliare.Monitoraggio");
                updInsCommand.Parameters.AddWithValue("@Descrizione", "S" + Utility.CHIAVE_LAYOUT_SECTION + "." + chapter.titoloCapitolo + " - Immobiliare Monitoraggio");
            }
            else
            {
                updInsCommand.Parameters.AddWithValue("@classe", "S" + chapter.idCapitolo);
                updInsCommand.Parameters.AddWithValue("@NameSpace", "Consulenza.ReportWriter.Manager.Section.Immobiliare.Monitoraggio");
                updInsCommand.Parameters.AddWithValue("@Descrizione", "S" + chapter.idCapitolo + "." + chapter.titoloCapitolo + " - Immobiliare Monitoraggio");
            }
            int rowsUpdatedInserted = updInsCommand.ExecuteNonQuery();
            templateStrutturaModelli.sezioneChiaveLayout = Utility.CHIAVE_LAYOUT_SECTION + 3500;
        }
        
    }
}
