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



namespace Consulenza.ReportWriter.Manager.Section.Unica
{
    /// <summary>
    /// S14.PatrimonioFideuramProdottiBonus - ConsulenzaUnica idSezione = 57
    /// </summary>
    public class S14 : Entity.Section
    {
        string addNomeContratto = "";

        public S14(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S14", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        /// <summary>
        /// 
        /// </summary>
        protected override sealed void Draw()
        {
            
            var dati = GetDataSet();

            if (getTesto1().Length > 0)
            {
                AddElement(new SpacePDF(20));
                AddElement(new FormattedTextAreaPDF(getTesto1(), EnvironmentFacade.RendererFacade.XLeftLimit) {FontSize=7, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify });
                AddElement(new SpacePDF(15));
            }

            TablePDF tabellaBonus =null;
            foreach (DataTable dtBonus in dati.Tables) {
                tabellaBonus = new TablePDF(EnvironmentFacade.RendererFacade.XLeftLimit, dtBonus)
                {
                    Style = Style.ConsulenzaUnica,
                    Header = true,
                    Footer = false,
                    AlternateRow = false,
                    RowHeight = 25
                };
                tabellaBonus.Columns.Add(new ColumnPDF("Descrizione", 350, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Descrizione", "Contratto " + dtBonus.TableName){HeaderFontSize=7 });
                tabellaBonus.Columns.Add(new ColumnPDF("Controvaloreattuale", 85, HorizontalAlignmentType.Sinistra, false, false, 7, ColumnType.Testo, "Controvaloreattuale", "Controvalore<br>attuale (€)") { HeaderFontSize = 7, PaddingRight=4, HeaderPaddingLeft = 15 });
                tabellaBonus.Columns.Add(new ColumnPDF("Datariferimento", 85, HorizontalAlignmentType.Destra, false, false, 7, ColumnType.Testo, "Datariferimento", "Data di<br> riferimento") { HeaderFontSize = 7});
                for (int i = 0; i < dtBonus.Rows.Count;i++ )
                {
                    tabellaBonus.Cells[1, i].HorizontalAlignment = HorizontalAlignmentType.Destra;
                }
                AddElement(tabellaBonus);
                AddElement(new SpacePDF(20));
            }

            if (tabellaBonus!=null) {
                tabellaBonus.Notes.Add(
                            new TableNotePDF(TableNotePDF.TableNotePositionType.PièDiTabella,
                                getNota1(),
                                new[] { "" },
                                "",
                                TableNotePDF.TableNoteAsteriskPositionType.PieDiTabella) { FontSize = 6, TextHorizontalAlign = ceTe.DynamicPDF.TextAlign.Justify }
                                );
            }
    
        }

       
        protected sealed override DataTable GetDataTable()
        {
            return null;
        }

         
        protected sealed override DataSet GetDataSet()
        {
            var ds = new DataSet();          

            var elencoContratti = datiSeiUnico.patrimonioUnit().patrimonioCasa.dettaglioContratti.elencoContratti; 

            foreach (var item in from o in elencoContratti where o.tipoContratto.Equals("PREMIUM") select o)
            {

                Int32 NumeroModulo = Convert.ToInt32(item.codiceContratto.Substring(8, 1) + item.codiceContratto.Substring(0, 6) + item.codiceContratto.Substring(9, 2));
                
                if (NumeroModulo < 100000100 && NumeroModulo > 199999912)
                    addNomeContratto = " 4+4";

                ds.Tables.Add(item.codiceContratto);
                ds.Tables[item.codiceContratto].Columns.Add(new DataColumn("Descrizione", typeof(string)));
                ds.Tables[item.codiceContratto].Columns.Add(new DataColumn("Controvaloreattuale", typeof(string)));
                ds.Tables[item.codiceContratto].Columns.Add(new DataColumn("Datariferimento", typeof(string)));

                ds.Tables[item.codiceContratto].Rows.Add(item.nomeContratto + addNomeContratto, Helper.FormatCurrency(item.ctvRiferimento.ToString()), Convert.ToDateTime(item.dtRiferimento).ToShortDateString());
                ds.Tables[item.codiceContratto].Rows.Add("Bonus maturato", Helper.FormatCurrency(item.ctvBonusMaturato.ToString()), Convert.ToDateTime(item.dtRiferimentoBonusMaturato).ToShortDateString());
                ds.Tables[item.codiceContratto].Rows.Add("Bonus a scadenza 5 anni", Helper.FormatCurrency(item.ctvBonusScadenza5Anni.ToString()), Convert.ToDateTime(item.dtRiferimentoBonusScadenza5Anni).ToShortDateString());
                ds.Tables[item.codiceContratto].Rows.Add("Bonus a scadenza 10 anni", Helper.FormatCurrency(item.ctvBonusScadenza10Anni.ToString()), Convert.ToDateTime(item.dtRiferimentoBonusScadenza10Anni).ToShortDateString());
            }

            return ds;
        }

        public virtual string getTesto1()
        {
            return datiSeiUnico.FormatBanca("Nella tabella sottostante è riportato il Bonus* maturato ad oggi sulle polizze unit linked Fideuram Vita Insieme Premium" + addNomeContratto + " da lei detenute nel patrimonio $/Banca/$. Si fornisce, inoltre, indicazione del Bonus previsto dalle suddette polizze alle scadenze contrattualmente stabilite.");
        }

         public virtual string getNota1() {
             return datiSeiUnico.FormatBanca("Il Bonus esposto in tabella dipende dal controvalore dei premi (di sottoscrizione o aggiuntivi) versati, o oggetto di riscatto, alla data di produzione del report, e pertanto può variare in funzione di essi. L'importo del bonus verrà erogato sotto forma di maggiorazione del numero di quote attribuite al contratto qualora siano rispettate le condizioni contrattuali.");
         }
    }
}
