using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Text;
using PDFGenerator.Presentation.Section.Tables;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.BusinessLayer;
using ContrattoSei.Utilities;
using ceTe.DynamicPDF.PageElements;
using System.Collections.Generic;
using System.Data;

namespace PDFGenerator.Presentation.Section
{
    public class S185 : ISezione
    {
        string Titolo = string.Empty;
        string _testotitolo;
        string _testointroduttivo;
        string _testoAlternativo;
        public int widthImporti = 75;
        public int widthData = 50;
        public int fontsize = 6;
        public int headerFontSize = 5;
        NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        /// <summary>
        /// Testo introduttivo della sezione.
        /// </summary>
        public string TestoIntroduttivo
        {
            get
            {
                return _testointroduttivo;
            }
            set
            {
                _testointroduttivo = value;
            }
        }

        /// <summary>
        /// Testo del titolo della sezione.
        /// </summary>
        public string TestoTitolo
        {
            get
            {
                return _testotitolo;
            }
            set
            {
                _testotitolo = value;
            }
        }

        public string TestoAlternativo
        {
            get { return _testoAlternativo; }
            set { _testoAlternativo = value; }
        }

        public void setTitolo(string label)
        {
            Titolo = label;
        }

        public S185()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        #region ISezione Members
        public void writeSezione(DataThread dataThread)
        {
            DocumentPDF document = dataThread.DocumentPDF;
            DataSetS185UlterioriCaratteristicheESG set = (DataSetS185UlterioriCaratteristicheESG)dataThread.Data.DatiSezione;
            //DataSet set = (DataSet)dataThread.Data.DatiSezione;
            DatiTabella datitab = new DatiTabella();

            datitab.table = set.Tables["dtUlterioriCaratteristicheESG"];

            //set.Tables["dtprodotti"].Columns.Add("Immagine");
            //datitab.table = set.Tables["dtprodotti"];

            #region Titolo Seconda tabella
            // Titolo della sezione

            document.setSezTitoloDiagnosi(dataThread.SezioneReport.Titolo, "S185");

            document.setLastPos(2);

            string tempTesto = dataThread.IsProffesionalClient ? dataThread.SezioneReport.TestoIntroduttivoAlternativo : dataThread.SezioneReport.TestoIntroduttivo;

            document.setChapterHeader(tempTesto.Replace("$/Banca/$", dataThread.NomeRete).Replace("Sanpaolo Invest", "Fideuram S.p.A., tramite la rete di private banker Sanpaolo Invest,"), 0, 520, 8, "S177", dataThread.TipoReport);

            //switch (dataThread.Rete)
            //{
            //    case "F":
            //        {
            //            _testointroduttivo = _testointroduttivo.Replace("$/Banca/$", "Fideuram");
            //            break;
            //        }
            //    case "S":
            //        {
            //            _testointroduttivo = _testointroduttivo.Replace("$/Banca/$", "Fideuram S.p.A., commercializzati tramite la rete di private banker Sanpaolo Invest,");
            //            break;
            //        }
            //    case "W":
            //        {
            //            _testointroduttivo = _testointroduttivo.Replace("$/Banca/$", "IW Private Investments");
            //            break;
            //        }
            //}

            logger.Info("Titolo della sezione " + _testointroduttivo);
            //document.setLastPos(-40);
            document.setLastPos(-25);
            //document.setChapterHeader(string.Concat(_testointroduttivo, "<br>"), 0, 520, 8);
            #endregion


            #region Tabella 

            /***** Disegno la tabella con oggetti della solution trimestrale *************/
            int widthTotaleAltre = calculateWidth();
            int widthNomeProdotto = 600 - widthTotaleAltre + 14;  //15

            Tabella tabellaDati = new Tabella(document.getMargineLeft(), document.getLastPos(), 2, 0, 0.02F);
            tabellaDati.Header = true;
            tabellaDati.HeaderFont = 8;
            tabellaDati.Datasource = datitab.table;
            tabellaDati.AltezzaCella = 30;  //15;
            tabellaDati.LineaFineTabella = false;
            tabellaDati.stepAltezzaRigaSaltoPagina = 7;

            tabellaDati.WithImage = true;

            tabellaDati.Colonne.Add(new Colonna("NomeProdotto", "Prodotto", widthNomeProdotto, TipoAllineamento.SINISTRA, false, tabellaDati.HeaderFont, false));
            tabellaDati.Colonne.Add(new Colonna("Nome_Progetto", string.Empty, 0, TipoAllineamento.SINISTRA, false, tabellaDati.HeaderFont, false));
            /********************************************************************************************/
            tabellaDati.Colonne.Add(new Colonna("PERC_INVESTIMENTO_SFDR", "% minima di investimento sostenibile<br>(SFDR)", 63, TipoAllineamento.SINISTRA, false, tabellaDati.HeaderFont, false, TipoColonna.TESTO));
            tabellaDati.Colonne.Add(new Colonna("PERC_INVESTIMENTO_TAXONOMY", "% minima di investimenti<br>ecosostenibili<br>(Taxonomy)", 70, TipoAllineamento.SINISTRA, false, tabellaDati.HeaderFont, false, TipoColonna.TESTO));
            tabellaDati.Colonne.Add(new Colonna("label_PAI_A", string.Empty, 85, TipoAllineamento.SINISTRA, false, tabellaDati.HeaderFont, false, TipoColonna.TESTO));
            tabellaDati.Colonne.Add(new Colonna("label_PAI_S", string.Empty, 85, TipoAllineamento.SINISTRA, false, tabellaDati.HeaderFont, false, TipoColonna.TESTO));
            tabellaDati.Colonne.Add(new Colonna("label_U_INFO_ESG", "Ulteriori<br>elementi<br>ESG", 60, TipoAllineamento.SINISTRA, false, tabellaDati.HeaderFont, false, TipoColonna.TESTO));
            tabellaDati.Colonne.Add(new Colonna("Controvalore", "Controvalore (€)", widthImporti, TipoAllineamento.DESTRA, false, tabellaDati.HeaderFont, false, TipoColonna.TESTO));

            tabellaDati.DrawUlterioriCaratteristicheESG(datitab, document);
            /**********************************************************************************************/

            #region Nuova versione Tabella Totale Risorse Finanziarie
            // Recupero le altezze delle tabelle
            float dim = (datitab.GetRowDim() * datitab.getNumRow()) + datitab.getHeaderDim() + 30 + tabellaDati.stepAltezzaRigaSaltoPagina;

            Tabella tabellaTotali_OUT = null;


            if (!dataThread.Periodico)
            {
                decimal totale = 0.0M;
                foreach(var item in set.Tables["dtUlterioriCaratteristicheESG"].AsEnumerable())
                {
                    if (item.Field<string>("nome_progetto") != "S" || item.Field<string>("nome_progetto") != null)
                    {
                        if (item.Field<string>("Area") == string.Empty || item.Field<string>("Area") != null)
                            totale += Convert.ToDecimal(item.Field<string>("Controvalore"));
                    }

                }


                DataSet _ds = new DataSet();
                DataTable _dt = new DataTable();
                _dt.Columns.Add("PatrimonioFideuram", typeof(System.String));
                _dt.Columns.Add("Totale", typeof(System.String));

                _ds.Tables.Add(_dt);
                DataRow dr = _dt.NewRow();
                dr[0] = "Totale portafoglio";
                dr[1] = UtilityBusinessLayer.FormatDecimal(totale.ToString(), 2);

                _dt.Rows.Add(dr);

                datitab = new DatiTabella();
                datitab.table = _dt;

                tabellaTotali_OUT = new Tabella(document.getMargineLeft(), document.getLastPos() + dim);
                tabellaTotali_OUT.HeaderFont = 8;
                tabellaTotali_OUT.Header = false;
                tabellaTotali_OUT.SaltoPagina = false;

                tabellaTotali_OUT.Colonne.Add(new Colonna("PatrimonioFideuram", "", 155, TipoAllineamento.SINISTRA, true, 8, true));
                tabellaTotali_OUT.Colonne.Add(new Colonna("Totale", "", 370, TipoAllineamento.DESTRA, true, 8, true));

                // Scrive la tabella Totale Risorse Finanziari
                tabellaTotali_OUT.Draw(datitab, document);
            }
            #endregion


            #region Nota tabella
            bool flgNota1 = false;
            bool flgNota2 = false;
            foreach (var item in set.Tables["dtUlterioriCaratteristicheESG"].AsEnumerable())
            {
                if (item["Swicth"].ToString().Equals("false") || item["Swicth"].ToString() == String.Empty)
                {
                    if (item.ItemArray[11].ToString() == "nota1")
                        flgNota1 = true;

                    if (item.ItemArray[11].ToString() == "nota2")
                        flgNota2 = true;
                }
                else
                {
                    flgNota1 = false;
                    flgNota2 = true;
                }
            }

            if (flgNota2)
            {
                if (flgNota1)
                    document.setNotaPieDiPagina("2. Allineamento ad uno o più degli obiettivi di investimento sostenibile (cd. SDG - Sustainable Development Goals): lo strumento soddisfa le preferenze di sostenibilità dell’investitore sulla base della metodologia interna adottata dal Gruppo Intesa Sanpaolo, che prevede, tra l’altro, la valutazione del grado di allineamento ad uno o più degli obiettivi di investimento sostenibile (cd. SDG - Sustainable Development Goals) in termini ambientali e/o sociali, definiti dalle Nazioni Unite");
                else
                    document.setNotaPieDiPagina("1. Allineamento ad uno o più degli obiettivi di investimento sostenibile (cd. SDG - Sustainable Development Goals): lo strumento soddisfa le preferenze di sostenibilità dell’investitore sulla base della metodologia interna adottata dal Gruppo Intesa Sanpaolo, che prevede, tra l’altro, la valutazione del grado di allineamento ad uno o più degli obiettivi di investimento sostenibile (cd. SDG - Sustainable Development Goals) in termini ambientali e/o sociali, definiti dalle Nazioni Unite");
            }
            
            if (flgNota1) document.setNotaPieDiPagina("1. Allineamento dell’Emittente e del sottostante ad uno o più degli obiettivi di investimento sostenibile (cd. SDG - Sustainable Development Goals): lo strumento soddisfa le preferenze di sostenibilità dell’investitore sulla base della metodologia interna adottata dal Gruppo Intesa Sanpaolo, che prevede, tra l’altro, la valutazione del grado di allineamento dell’Emittente e del sottostante ad uno o più degli obiettivi di investimento sostenibile (cd. SDG - Sustainable Development Goals) in termini ambientali e/o sociali, definiti dalle Nazioni Unite");


            //string nota = "*Il controvalore non considera i saldi negativi di conto corrente e/o le operazioni in corso.";

            //document.setSezFooter(nota, tabellaDati.AltezzaTabella + tabellaTotali_OUT.AltezzaTabella + tabellaTotali_OUT.AltezzaCella, 0, 7);
            //tabellaTotali_OUT.NotaTabella.Add(nota);


            #endregion

            #endregion
            /*** ATTENZIONE Forzatura - Pino ************************/
            //dataThread.Periodico = true;
            //dataThread.CodiceFiscale = "DGSMHL70H08Z404F";
            //dataThread.Rete = "S";
            /********************************************************/
        }

        protected int calculateWidth()
        {
            int tot = 0;
            tot += widthImporti;
            tot += widthImporti;
            tot += widthImporti;
            tot += widthImporti;
            tot += widthImporti;
            tot += widthImporti;
            tot += widthImporti;
            return tot;

        }

        #endregion

    }
}