using System;
using System.Collections.Generic;
using System.Linq;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Data;
using Consulenza.ReportWriter.Business.Entity;

namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.Diagnosi
{
    /// <summary>
    /// Dettaglio immobili con anomalie catastali (id 40)
    /// </summary>
    public class S8 : Entity.Section
    {
        public S8(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S8", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        /// <summary>
        /// Scheda8. Dettaglio immobili con anomalie catastali (riepilogo delle anomalie catastali per immobile)
        /// </summary>
        protected override sealed void Draw()
        {
            var dati = GetDataTable();
            var testi = GetText();

            string sTesto = "Di seguito si riassumono le anomalie catastali rilevate.";
            if (testi.Rows.Count > 0)
                sTesto = testi.Rows[0]["testo1"].ToString();

            var titolo = new FormattedTextAreaPDF(sTesto, EnvironmentFacade.RendererFacade.XLeftLimit, 600) { FontSize = 10, FontColor = ColorPDF.Immobiliare_Grigio_TestoStandard };
            AddElement(new SpacePDF(40));
            AddElement(titolo);

            #region Oggetti da ripetere al salto pagina della tabella

            var listaOggettiDaRipetere = new List<ObjectPDF> { new SpacePDF(40), titolo, new SpacePDF(20) };
            AddElement(new RepeaterPDF(listaOggettiDaRipetere));

            #endregion

            AddElement(new SpacePDF(20));

            #region Tabella

            var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati)
            {
                Style = Style.Immobiliare,
                Footer = false,
                ShowBorderLastLine = true,
                ShowSeparationLines = true
            };


            tabella.Columns.Add(new ColumnPDF("descrizione", 240, HorizontalAlignmentType.Sinistra, false, false, 8, ColumnType.Testo, "descrizione", "Descrizione") { FontColor = ColorPDF.Nero });
            tabella.Columns.Add(new ColumnPDF("valorestimato", 100, HorizontalAlignmentType.Destra, false, false, 8, ColumnType.Decimale, "valorestimato", "Valore stimato (€)") { FontColor = ColorPDF.Nero });
            tabella.Columns.Add(new ColumnPDF("SEP1", 20, HorizontalAlignmentType.Nonimpostato, false, false, 8, ColumnType.Testo, "sep1", string.Empty)); //Separatore
            tabella.Columns.Add(new ColumnPDF("anomalierilevate", 395, HorizontalAlignmentType.Sinistra, true, false, 8, ColumnType.Testo, "anomalierilevate", "Anomalie rilevate")
            {
                HeaderBackgroundColor = ColorPDF.Immobiliare_Grigio_TitoloPiccolo,
                FontColor = ColorPDF.Nero,
                BackgroundColor = new ColorPDF(196, 196, 187)
            });

            AddElement(tabella);

            #endregion
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataTable.
        /// </summary>
        /// <returns></returns>
        protected override DataTable GetDataTable()
        {
            #region Definizione dei parametri

            var parametri = new List<Parametro>
            {
                new Parametro
                {
                    Direction = ParameterDirection.Input,
                    DbType = DbType.Int64,
                    ParameterName = "ChiaveClientePB",
                    Value = EnvironmentFacade.ReportEnvironment.Cliente.Chiave
                }
            };

            #endregion

            var dt =EnvironmentFacade.ReportEnvironment.Immobiliare.ImmobiliareCEUnica ?  DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Immobiliare_S8_DettaglioImmobiliAnomalieCatastali", parametri)
                : DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Immobiliare_S8_DettaglioImmobiliAnomalieCatastali", parametri);


            //Riaggregazione
            var query = (from p in dt.AsEnumerable()
                         group p by p.Field<string>("IdImmobileCatasto") into g
                         select new
                         {
                             IdImmobileCatasto = g.Key,
                             Descrizione = g.Select(x => x.Field<string>("Descrizione")).FirstOrDefault(),
                             ValoreStimato = g.Select(x => x.Field<decimal>("ValoreStimato")).FirstOrDefault(),
                             AnomalieRilevate = string.Join("<BR><BR>", g.Select(x => x.Field<string>("AnomalieRilevate")))
                         }).ToList();


            var dtResult = dt.Clone();

            foreach (var item in query)
                dtResult.Rows.Add(item.IdImmobileCatasto, item.Descrizione, item.ValoreStimato, string.Empty, item.AnomalieRilevate);


            return dtResult;
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataSet.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataSet GetDataSet()
        {
            return null;
        }
    }
}
