using System;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Data;
using Consulenza.ReportWriter.Business.CHART_PDF;
using System.Collections.Generic;
using System.Linq;
using Consulenza.ReportCommon;
using ceTe.DynamicPDF;
using Consulenza.DataServices.fideuram.data.service;
using Consulenza.ReportWriter.Business.Entity;


namespace Consulenza.ReportWriter.Manager.Section.Unica
{
    /// <summary>
    /// Scheda 11. Patrimonio Fideuram: dettaglio contratti. IdSezione 54
    /// </summary>
    public class S11 : Entity.Section
    {
        bool presenzaColonnaControvaloreProdotto;   
        public S11(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S11", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        protected override sealed void Draw()
        {
            var dati = GetDataSet();

            #region Testo Introduttivo
            AddElement(new SpacePDF(20));
            AddElement(new FormattedTextAreaPDF(getTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit, 520) {FontSize=7, TextHorizontalAlign = TextAlign.Justify });
            AddElement(new SpacePDF(15));
            #endregion

            #region Tabella Contratti con controvalore positivi

            var tabella = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dati.Tables["contratto"])
                {
                    Style = Style.ConsulenzaUnica,
                    AlternateRow = false,
                    HeaderHeight = 30,
                    HeaderTextHorizontalAlign = HorizontalAlignmentType.Sinistra                   
                };


            //int larghezzaColonnaContratto = mostraColonnaIntestatari() ? 156 : 274;
            tabella.Columns.Add(new ColumnPDF("Numerocontratto", 75, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Numerocontratto", "Numero<br> contratto") { HeaderFontSize = 7});
            //tabella.Columns.Add(new ColumnPDF("Nomecontratto", larghezzaColonnaContratto, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Nomecontratto", "Nome contratto") { HeaderFontSize = 7 });
            //if (mostraColonnaIntestatari())
            //    tabella.Columns.Add(new ColumnPDF("Intestatari", 118, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Intestatari", "Intestatari") { HeaderFontSize = 7 });
            //tabella.Columns.Add(new ColumnPDF("Datasottoscrizione", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Datasottoscrizione", "Data<br>sottoscrizione") { HeaderFontSize = 7, HeaderPaddingLeft = 4, PaddingLeft = 4 });
            //tabella.Columns.Add(new ColumnPDF("Controvaloreattuale", 91, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvaloreattuale", "Controvalore<br>attuale (€)") {HeaderFontSize=7, PaddingRight = 4, HeaderPaddingLeft=15});
            // Modifica per Value Plan
            int larghezzaColonnaContratto = mostraColonnaIntestatari() ? 156 : 274;
            tabella.Columns.Add(new ColumnPDF("immagineValue", 15, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Immagine, "immagineValue", string.Empty) { DeltaYContent = 6, ScaleColumnTypeImage = 0.50F });
            tabella.Columns.Add(new ColumnPDF("Nomecontratto", larghezzaColonnaContratto - 15, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Nomecontratto", "Nome contratto") { HeaderFontSize = 7 });
            
            if (mostraColonnaIntestatari())
                tabella.Columns.Add(new ColumnPDF("Intestatari", 118, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Intestatari", "Intestatari") { HeaderFontSize = 7 });
            tabella.Columns.Add(new ColumnPDF("Datasottoscrizione", 80, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Datasottoscrizione", "Data<br>sottoscrizione") { HeaderFontSize = 7, HeaderPaddingLeft = 4, PaddingLeft = 4 });
            tabella.Columns.Add(new ColumnPDF("Controvaloreattuale", 91, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Decimale, "Controvaloreattuale", "Controvalore<br>attuale (€)") { HeaderFontSize = 7, PaddingRight = 4, HeaderPaddingLeft = 15 });


            for (int h = 0;h<dati.Tables["contratto"].Rows.Count;h++ )  {
                DataRow row = dati.Tables["contratto"].Rows[h];
                tabella.Cells[mostraColonnaIntestatari()?5:4, h].HorizontalAlignment = HorizontalAlignmentType.Destra;
                if (Convert.ToBoolean(row["ColSpan"]))
                {
                    tabella.Cells[0, h].ColSpan = 3;
                    tabella.Cells[0, h].Value = row["NomeContratto"].ToString();
                }
                for (int c = 0; c < tabella.Columns.Count; c++)   {
                    tabella.Cells[c, h].BackgroundColor = Convert.ToBoolean(row["BackgroundGray"]) ? ColorPDF.ConsulenzaUnica_Grigio_SfondoColonnaHeaderFooterTabella : ColorPDF.Bianco;
                    tabella.Cells[c, h].FontBold = Convert.ToBoolean(row["FontBold"]); 
                }

                // Aggiunta per Value Plan
                float fSpace = 0;
                fSpace = row["NomeContratto"].ToString().Length * 2.3f;
                var icona = new ImagePDF(EnvironmentFacade.RendererFacade.XLeftLimit, 0.6F, row["immagineValue"].ToString()) { AutoIncrementYWritable = false, DeltaY = 3, DeltaX = fSpace };
                var titolo = new FormattedTextAreaPDF();
                titolo.Text = row["NomeContratto"].ToString();
                titolo.DeltaY = 2;
                titolo.TextVerticalAlign = VAlign.Center;

                var listaOggettiDaRipetere = new List<ObjectPDF> { titolo, icona };
                tabella.Cells[1, h].ValueObjectList = listaOggettiDaRipetere;
            }
            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 override DataSet GetDataSet()
        {
            #region Estrazione Chiave PB + Servizi
          
            var contrattiPatrimonioCasa = datiSeiUnico.patrimonioUnit().contrattiCliente.elencoContratti.ToList();
            var pianificazione = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale;
            string Complessivo = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.sommaCtvAree.ToString();
            #endregion

            #region Creazione Tabella

            var ds = new DataSet();
            ds.Tables.Add(new DataTable("contratto"));
          
           
            #endregion

            #region Contratti
            ds.Tables["contratto"].Columns.Add(new DataColumn("NumeroContratto", typeof(string)));
            // Aggiunta per Value Plan
            ds.Tables["contratto"].Columns.Add(new DataColumn("immagineValue", typeof(string)));
            // Fine Aggiunta
            ds.Tables["contratto"].Columns.Add(new DataColumn("NomeContratto", typeof(string)));

            ds.Tables["contratto"].Columns.Add(new DataColumn("Intestatari", typeof(string)));
            ds.Tables["contratto"].Columns.Add(new DataColumn("DataSottoscrizione", typeof(string)));
            ds.Tables["contratto"].Columns.Add(new DataColumn("ControvaloreAttuale", typeof(decimal)));
            ds.Tables["contratto"].Columns.Add(new DataColumn("FontBold", typeof(bool)));
            ds.Tables["contratto"].Columns.Add(new DataColumn("BackgroundGray", typeof(bool)));
            ds.Tables["contratto"].Columns.Add(new DataColumn("ColSpan", typeof(bool)));

            var cc =  from o in contrattiPatrimonioCasa where o.ctv >= 0 orderby o.ctv descending select o;
            var ccn = from o in contrattiPatrimonioCasa where o.ctv < 0 orderby o.ctv descending select o;

            var sImmagine = "";

            foreach (var contratto in cc)
            {
                var intestatari = contratto.intestatari != null ? contratto.intestatari.Select(c => new { contrattoConcatenato = string.Format("{0}° {1}", c.posizionamento, c.nomeCognome) }) : null;
                var sIntestatari =contratto.intestatari != null ? string.Join("<BR>", intestatari.Select(o => o.contrattoConcatenato)) : "";

                // Aggiunta per Value Plan               
                sImmagine = "";
                if (contratto.savingMap)
                //if (contratto.nomeContratto.Substring(0, 2).ToUpper() == "FO")
                    sImmagine = "SavingMap.png";               
                
                ds.Tables["contratto"].Rows.Add(
                    contratto.codiceContratto,
                    sImmagine,
                    contratto.nomeContratto,                    
                    sIntestatari,
                    contratto.dtSottoscrizione.ToShortDateString(),
                    contratto.ctv,
                    false,
                    false,
                    false
                    );
                // Fine Aggiunta

                //ds.Tables["contratto"].Rows.Add(
                //    contratto.codiceContratto, 
                //    contratto.nomeContratto, 
                //    sIntestatari, 
                //    contratto.dtSottoscrizione.ToShortDateString(), 
                //    contratto.ctv,
                //    false,
                //    false,
                //    false
                //    );
            }
            #endregion

            #region Contratti Footer



            if (ccn.Count() > 0 || datiSeiUnico.CASA_OC != 0) {
                        ds.Tables["contratto"].Rows.Add(
                            "Totale risorse finanziarie",
                            "",                            
                            "",
                            "",
                            "",
                            datiSeiUnico.CASA_SUBTOTALE + datiSeiUnico.CASA_GPELIGO,
                            true,
                            true,
                            true
                        );
                        if (datiSeiUnico.CASA_OC != 0) {
                            ds.Tables["contratto"].Rows.Add(
                                "Operazioni in corso",
                                "",
                                "",
                                "",
                                "",
                                datiSeiUnico.CASA_OC,
                                false,
                                false,
                                false
                            );
                        }
                        foreach (var contratto in ccn)
                        {
                            var intestatari = contratto.intestatari != null ? contratto.intestatari.Select(c => new { contrattoConcatenato = string.Format("{0}° {1}", c.posizionamento, c.nomeCognome) }) : null;
                            var sIntestatari = contratto.intestatari != null ? string.Join("<BR>", intestatari.Select(o => o.contrattoConcatenato)) : "";

                            // Aggiunta per Value Plan
                            sImmagine = "";
                            if (contratto.savingMap)
                            //if (contratto.nomeContratto.Substring(0, 1) == "F")
                                sImmagine = "SavingMap.png";
                            // Fine Aggiunta 

                            ds.Tables["contratto"].Rows.Add(
                                contratto.codiceContratto,
                                sImmagine,
                                contratto.nomeContratto,                                
                                sIntestatari,
                                contratto.dtSottoscrizione.ToShortDateString(),
                                contratto.ctv,
                                false,
                                false,
                                false
                            );                      
                        }
            
            }


            ds.Tables["contratto"].Rows.Add(
                Helper.ReplaceVariables("Patrimonio $/Banca/$", base.EnvironmentFacade.ReportEnvironment),
                "",
                "",                
                "",
                "",
                datiSeiUnico.CASA_TOTALE,
                true,
                true,
                true
            );

           
            #endregion           

            return ds;
        }

      

        public virtual bool mostraColonnaIntestatari()
        {
            return GetOption<Opzione4>().Valore;
        }

        public virtual string getTesto1()
        { 
            string testo="";
            if (mostraColonnaIntestatari())
                testo += "In questa scheda sono riportati i contratti che lei ha sottoscritto presso $/Banca/$. Per ciascun contratto si fornisce l'evidenza di tutti i relativi intestatari.";
            else
                testo += "In questa scheda sono riportati i contratti che lei ha sottoscritto presso $/Banca/$.";
            return datiSeiUnico.FormatBanca(testo);
        }
    }
}
