using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PDFGenerator.BusinessLayer;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.Presentation.Section.Tables;
using System.Data;

namespace PDFGenerator.Presentation.Section
{
    class S334: ISezione
    {
        private string _titolo = string.Empty;
        private string _testointroduttivo = string.Empty;

        /// <summary>
        /// Titolo della sezione
        /// </summary>
        public string Titolo
        {
            get
            {
                return _titolo;
            }
            set
            {
                _titolo = value;
            }

        }


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


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


        public void writeSezione(DataThread dataThread)
        {
            DocumentPDF document = dataThread.DocumentPDF;
            document.setSezTitolo(dataThread.SezioneReport.Titolo);
                                  
            //DataSetS137 set = (DataSetS137)dataThread.Data.DatiSezione;
            DataSetS334 set = (DataSetS334)dataThread.Data.DatiSezione;
            //ToDo
            //if (dataThread.TipoContratto != TipoContratto.Private)
            //{
            //    if ( (set.Protetti.Rows.Count == 1))
            //    {
            //        if (document.checkMargin(280))
            //            document.addPage();
            //    }
            //    else
            //    {

            //        if (document.checkMargin(260))
            //            document.addPage();
            //    }
            //}


            if (set.Protetti.Rows.Count > 0)
            {
                if (document.checkMargin(100))
                    document.addPage();
               
                
                string testo = dataThread.SezioneReport.TestoIntroduttivo.Replace("/$Banca$/", dataThread.NomeRete).Replace("Sanpaolo Invest", "Fideuram S.p.A., commercializzato tramite la rete di private banker Sanpaolo Invest"); ;
                testo = testo.Replace("$/Prodotto/$", set.Protetti.Rows[0]["DES_PROD"].ToString());
                testo = testo.Replace("$/QMaxPerc/$", set.Protetti.Rows[0]["QUOTA_MAX_PERC"].ToString());
                document.setChapterHeader(testo, 0, 520, 8);
                CapitaleProtetto(dataThread);

                //addNota(document);

            }




            //document.setChapterHeader(tempTesto, 0, 520, 8);


            //DataSetS334 set = (DataSetS334)dataThread.Data.DatiSezione;

            //document.setHeaderSpace(35);

            //document.writeText(document.getMargineLeft() - 5, document.getLastPos(), tempTestoAlt, 8, 520, ceTe.DynamicPDF.TextAlign.Justify);

            ////document.setHeaderSpace(60);
            //document.setLastPos(40);

            //ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();
            //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("(*) Grado di copertura: ", 5, 7, 7, 7));

            //document.addPage();



            //DocumentPDF document = dataThread.DocumentPDF;
            //DataSetS137 set = (DataSetS137)dataThread.Data.DatiSezione;

            //float htestosotto = 0;


            //for (int r = 0; r < set.Protetti.Rows.Count; r++)
            //{
            //    Tabella tabellaDati = new Tabella();
            //    tabellaDati.HeaderFont = 8;
            //    DataRow riga = set.Protetti.Rows[r];
            //    if (r == set.Protetti.Rows.Count - 1) htestosotto = 100;
            //    if (document.checkMargin((tabellaDati.AltezzaCella * 4) + htestosotto))
            //        document.addPage();
            //    tabellaDati.Header = true;
            //    tabellaDati.Y = document.getLastPos();
            //    tabellaDati.X = document.getMargineLeft();
            //    tabellaDati.Colonne.Add(new Colonna("DESCRIZIONE", "Descrizione", 232, TipoAllineamento.SINISTRA, false, 7, false));
            //    tabellaDati.Colonne.Add(new Colonna("QUOTA", "Quota (€)", 60, TipoAllineamento.DESTRA, false, 7, false));
            //    tabellaDati.Colonne.Add(new Colonna("NUMEROQUOTE", "Numero Quote", 60, TipoAllineamento.DESTRA, false, 7, false));
            //    tabellaDati.Colonne.Add(new Colonna("CONTROVALORE", "Controvalore (€)", 90, TipoAllineamento.DESTRA, false, 7, false));
            //    tabellaDati.Colonne.Add(new Colonna("DATARIF", "Data di riferimento", 70, TipoAllineamento.DESTRA, false, 7, false));
            //    tabellaDati.Draw(new DatiTabella(TabellaCapitaleProtetto(riga)), document);
            //    document.setLastPos(tabellaDati.AltezzaTabella - 15);
            //}
            //string nota = dataThread.SezioneReport.NotaAlternativa;
            //nota = nota.Replace("$/QMaxPerc/$", set.Protetti.Rows[0]["QUOTA_MAX_PERC"].ToString());
            //document.setChapterHeader(nota, 0, 520, 8);





        }
        private void CapitaleProtetto(DataThread dataThread)
        {

            DocumentPDF document = dataThread.DocumentPDF;
           
            DataSetS334 set = (DataSetS334)dataThread.Data.DatiSezione;
            float htestosotto = 0;


            for (int r = 0; r < set.Protetti.Rows.Count; r++)
            {
                Tabella tabellaDati = new Tabella();
                tabellaDati.HeaderFont = 8;
                DataRow riga = set.Protetti.Rows[r];
                if (r == set.Protetti.Rows.Count - 1) htestosotto = 100;
                if (document.checkMargin((tabellaDati.AltezzaCella * 4) + htestosotto))
                    document.addPage();
                tabellaDati.Header = true;
                tabellaDati.Y = document.getLastPos();
                tabellaDati.X = document.getMargineLeft();


                string titoloDescrizione = null;
                switch ( riga["TIP_PROD"].ToString() )
                {
                    case "ASU1" :
                        //switch per codice sotto prodotto RS RV RM per gestione label
                       titoloDescrizione = "Fideuram Vita Insieme Premium             " + "Contratto " + riga["Cod_Conf"];
                       break;
                    case "GP":
                       titoloDescrizione = "GP Eligo Fondi " + "Contratto " + riga["Cod_Conf"];
                       break;
                    default:
                       titoloDescrizione = "Contratto " + riga["Cod_Conf"];
                       break;
                }
                tabellaDati.Colonne.Add(new Colonna("DESCRIZIONE", titoloDescrizione, 232, TipoAllineamento.SINISTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("QUOTA", "Quota (€)", 60, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("NUMEROQUOTE", "Numero Quote", 60, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("CONTROVALORE", "Controvalore (€)", 90, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("DATARIF", "Data di riferimento", 70, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Draw(new DatiTabella(TabellaCapitaleProtetto(riga)), document);
                document.setLastPos(tabellaDati.AltezzaTabella - 15);
            }
            string nota = dataThread.SezioneReport.NotaAlternativa;
            nota = "(*) La quota protetta è pari all’80% della quota massima giornaliera raggiunta dal fondo dalla data di partenza: la quota massima potrebbe variare in funzione delle condizioni di mercato. Il controvalore protetto è calcolato ipotizzando che il numero delle quote si mantenga costante nel tempo e sia quindi uguale a quello disponibile alla data di produzione del report: il numero delle quote potrebbe variare nel tempo in seguito a movimentazione da parte del cliente o in seguito ad attività di ribilanciamento, prevista dal contratto.";
            //nota = nota.Replace("$/QMaxPerc/$", set.Protetti.Rows[0]["QUOTA_MAX_PERC"].ToString());
            document.setChapterHeader(nota, 0, 520, 8);
        
        }

        private DataTable TabellaCapitaleProtetto(DataRow riga)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("DESCRIZIONE");
            dt.Columns.Add("QUOTA");
            dt.Columns.Add("NUMEROQUOTE");
            dt.Columns.Add("CONTROVALORE");
            dt.Columns.Add("DATARIF");
            DataRow dr = dt.NewRow();
            dr["DESCRIZIONE"] = riga["DES_PROD"];// +" " + riga["COD_CONF"];
            dr["QUOTA"] = riga["QUOTA"];
            dr["NUMEROQUOTE"] = riga["NUMEROQUOTE"];
            dr["CONTROVALORE"] = riga["CONTROVALORE"];
            dr["DATARIF"] = riga["DATARIF"];
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["DESCRIZIONE"] = riga["DES_MAX"];
            dr["QUOTA"] = riga["QUOTA_MAX"];
            dr["NUMEROQUOTE"] = "-";
            dr["CONTROVALORE"] = "-";
            dr["DATARIF"] = riga["DATARIF_MAX"];
            dt.Rows.Add(dr);
            dr = dt.NewRow();
            dr["DESCRIZIONE"] = riga["DES_PROT"];
            dr["QUOTA"] = riga["QUOTA_PROT"];
            dr["NUMEROQUOTE"] = riga["NUMEROQUOTE_PROT"];
            dr["CONTROVALORE"] = riga["CONTROVALORE_PROT"];
            dr["DATARIF"] = "-";
            dt.Rows.Add(dr);
            return dt;
        }
        private void addNota(DocumentPDF doc)
        {
            FormatNum con = new FormatNum();
            //doc.setNotaPièDiPagina("(*) Alcuni prodotti non rientrano nel calcolo del rendimento. Il dettaglio del patrimonio non considerato viene fornito nel capitolo ''Patrimonio non rappresentabile''");
            doc.setSezFooter("",80);
            //doc.StampaNote("(*) Alcuni prodotti non rientrano nel calcolo del rendimento. Il dettaglio del patrimonio non considerato viene fornito nel capitolo ''Patrimonio non rappresentabile''");
        }
    }
}