using System;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Data;
using Consulenza.ReportCommon;

namespace Consulenza.ReportWriter.Manager.Section.Unica
{
    /// <summary>
    /// S38.PatrimonioAziendale  idSezione = 81
    /// </summary>
    public class S38 : Entity.Section
    {
        public S38(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S38", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        protected override sealed void Draw()
        {
            var dati = GetDataSet();
            if (dati.Tables["aziende"].Rows.Count > 0)
            {
                #region Tabella aziende
                DataTable dt = new DataTable();
                dt = dati.Tables["aziende"].AsEnumerable().OrderByDescending(o => o.Field<decimal>("ValoreCommerciale")).CopyToDataTable();
                var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dt, dati.Tables["aziendeFooter"])
                {
                    Style = Style.ConsulenzaUnica,
                    AlternateRow = false,
                    HeaderHeight = 30,
                    HeaderTextHorizontalAlign = HorizontalAlignmentType.Sinistra
                };

                tabella.Columns.Add(new ColumnPDF("Descrizione", 170, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Descrizione") { HeaderFontSize = 7 });
                tabella.FooterColumns.Add(new ColumnPDF("Descrizione", 170, HorizontalAlignmentType.Sinistra, true, true, 7, ColumnType.Testo));

                tabella.Columns.Add(new ColumnPDF("ValoreCommerciale", 140, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Valorecommerciale", "Valore commerciale (€)") {HeaderFontSize = 7, HeaderPaddingRight = 15, PaddingRight = 15 });
                tabella.FooterColumns.Add(new ColumnPDF("Valorestimato", 140, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 15 });

                tabella.Columns.Add(new ColumnPDF("Tipologia", 110, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Tipologia", "Tipologia") { HeaderFontSize = 7 });
                tabella.Columns.Add(new ColumnPDF("PatrimonioNetto", 100, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Patrimonionetto", "Patrimonio netto (€)") { HeaderFontSize = 7, PaddingRight = 10 });
                tabella.FooterColumns.Add(new ColumnPDF("PatrimonioNetto", 210, HorizontalAlignmentType.Destra, true, true, 7, ColumnType.Decimale) { PaddingRight = 5 });
                int i = 0;
                foreach (var item in dati.Tables["aziende"].Rows)
                {
                    tabella.Cells[1, i].HorizontalAlignment = HorizontalAlignmentType.Destra;
                    tabella.Cells[3, i].HorizontalAlignment = HorizontalAlignmentType.Destra;
                    
                    i++;
                }
                AddElement(tabella);

                #endregion
            }
        }

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

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataSet.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataSet GetDataSet()
        {
            var ds = new DataSet();

            ds.Tables.Add(new DataTable("aziende"));
            ds.Tables.Add(new DataTable("aziendeFooter"));

            var patrimonioAziendale = datiSeiUnico.patrimonioUnit().patrimonioAziendale;
            var listaAziende = patrimonioAziendale.listaProdotti;

            #region Aziende

            ds.Tables["aziende"].Columns.Add(new DataColumn("Descrizione", typeof(string)));
            ds.Tables["aziende"].Columns.Add(new DataColumn("ValoreCommerciale", typeof(decimal)));
            ds.Tables["aziende"].Columns.Add(new DataColumn("Tipologia", typeof(string)));
            ds.Tables["aziende"].Columns.Add(new DataColumn("PatrimonioNetto", typeof(decimal)));

            foreach (var item in listaAziende)
            {
                ds.Tables["aziende"].Rows.Add(
                  
                    item.descrizione,
                    item.ctv,
                    item.tipologia,
                    item.patrimonioNetto
                    );
            }

            #endregion

            #region Totale Aziende
            ds.Tables["aziendeFooter"].Columns.Add(new DataColumn("Totale", typeof(string)));
            ds.Tables["aziendeFooter"].Columns.Add(new DataColumn("ValoreCommerciale", typeof(decimal)));
            ds.Tables["aziendeFooter"].Columns.Add(new DataColumn("PatrimonioNetto", typeof(decimal)));

            ds.Tables["aziendeFooter"].Rows.Add(
                "Totale patrimonio aziendale",

                 Helper.FormatCurrency(patrimonioAziendale.totalePatrimonio.ToString()),
                 Helper.FormatCurrency(patrimonioAziendale.totalePatrimonioNetto.ToString())
                );

            #endregion

            return ds;
        }

    }
}
