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

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

        float dim = 0;

        /// <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 S331()
        {
            //
            // TODO: Add constructor logic here
            //
        }


        public void writeSezione(DataThread dataThread)
        {
            //DocumentPDF document = dataThread.DocumentPDF;
            //document.setSezTitolo(dataThread.SezioneReport.Titolo);
            //string tempTesto = dataThread.SezioneReport.TestoIntroduttivo.Replace("/$Banca$/", dataThread.NomeRete);
            //string tempTestoAlt = dataThread.SezioneReport.TestoIntroduttivoAlternativo.Replace("/$Banca$/", dataThread.NomeRete);

            ////if (dataThread.Rete.ToUpper() == "S")
            ////  {  
            ////    tempTesto = tempTesto.Replace("Banca Fideuram", "Sanpaolo Invest");
            ////    tempTestoAlt = tempTesto.Replace("Banca Fideuram", "Sanpaolo Invest");
            ////  }
            ////setChapterHeader(string label, int x, int width, float font)
            //document.setChapterHeader(tempTesto, 0, 520, 8);


            //DataSetS331 set = (DataSetS331)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();


            decimal totalePatrimonioCalcolato = 0;
            decimal totaleControvaloreProtettoCalcolato = 0;

            //totalePatrimonioCalcolato += Convert.ToDecimal(row["ControvaloreAttuale"]);
            //totaleControvaloreProtettoCalcolato += Convert.ToDecimal(row["ControvaloreProtetto"]);


            FormatNum conv = new FormatNum();

            DocumentPDF document = dataThread.DocumentPDF;
            DataSetS331 set = (DataSetS331)dataThread.Data.DatiSezione;

            


            document.setSezTitolo(dataThread.SezioneReport.Titolo);
            document.setChapterHeader(dataThread.SezioneReport.TestoIntroduttivo, 0, 520, 8);



            float YTable = document.getLastPos();
            float XTable = document.getMargineLeft();

            DatiTabella datitab = new DatiTabella();
            datitab.table = set.Tables["GraficoPiramide"];
            datitab.SetRowDim(15);

            Tabella tabellaDati = new Tabella(XTable, YTable);
            tabellaDati.DimensioneLinea = 0;
            tabellaDati.Header = true;
            tabellaDati.AltezzaCella = 15;
            tabellaDati.Datasource = datitab.table;
            tabellaDati.Colonne.Add(new Colonna("areaBisogno", "Area di bisogno", 172, TipoAllineamento.SINISTRA, false, 9, false));
            tabellaDati.Colonne.Add(new Colonna("controvalore", "Controvalore (€)", 85, TipoAllineamento.DESTRA,false, 9, false));
            tabellaDati.Colonne.Add(new Colonna("controvaloreProtetto", "Controvalore protetto (€)", 90, TipoAllineamento.DESTRA, false, 9, false));
            tabellaDati.Colonne.Add(new Colonna("contributoAllaProtezione", "Contributo alla protezione (%)", 165, TipoAllineamento.DESTRA, false, 9, false));
            tabellaDati.Draw(datitab, document);

            bool notaNeeded = false;
            if (notaNeeded)

                document.getCurrentPage().Elements.Add(new Label(Resource.Nota_TabellaEmittenti, XTable, YTable + tabellaDati.AltezzaTabella, 500F, 30F, Globals.OpenTypeFontVerdana, 8));
            
            //document.addPage();

            IEnumerable<DataRow> queryControvalore =
                from controvalore in datitab.table.AsEnumerable()
                select controvalore;

           
            foreach (DataRow p in queryControvalore)
            {
                Console.WriteLine("controvalore letto: " + Convert.ToDecimal(p.Field<string>("controvalore")));
               
                totalePatrimonioCalcolato += Convert.ToDecimal(p.Field<string>("controvalore"));
                Console.WriteLine("totalePatrimonioCalcolato: " + totalePatrimonioCalcolato);
            }

            IEnumerable<DataRow> queryControvaloreProtetto =
                from controvaloreProtetto in datitab.table.AsEnumerable()
                select controvaloreProtetto;

            foreach (DataRow cp in queryControvaloreProtetto)
            {
                Console.WriteLine("controvaloreprotetto letto: " + Convert.ToDecimal(cp.Field<string>("controvaloreProtetto")));
                
                totaleControvaloreProtettoCalcolato += Convert.ToDecimal(cp.Field<string>("controvaloreProtetto"));
                Console.WriteLine("totaleControvaloreProtettoCalcolato: " + totaleControvaloreProtettoCalcolato);
            }



            #region Piramide
            //disegno la parte della piramide
            Piramide modello = new Piramide();
            modello.writeSezione(document);
            #endregion


            #region Grafico Istogramma

            DatiGrafico dati = new DatiGrafico();

            //ripopolo la datitab perché in uscita dalla draw precedente non ha più la quarta colonna che mi serve qui
            //datitab.table = set.Tables["GraficoPiramide"];

            DataView view = new DataView(datitab.table);
            dati.dataTab = view.ToTable(false, "contributoAllaProtezione");
            dati.setHeight(185);
            //dati.setWidth(123);
            dati.setWidth(160);
            dati.ActLabelSeries();
            //IstoDoppio isto = new IstoDoppio();
            IstoDoppio331 isto = new IstoDoppio331();

            
            //document.InsertGrafico(isto.getGrafico(dati), document.getMargineLeft() + 405, document.getLastPos() + 14);
            //Istogramma isto = new Istogramma();
            document.InsertGrafico(isto.getGrafico(dati),400, document.getLastPos() - 12);
            //document.InsertGrafico(isto.getGrafico(dati), document.getMargineLeft() + 380, document.getLastPos() + 14);

            #endregion

            //intestazione grafico istogramma
            ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();
            this.headerChart(page, document.getMargineLeft() + 396, document.getLastPos()-6);

            #region Totale Patrimonio
            float marginePiramide = 37;
            float x = document.getMargineLeft();
            float y = document.getLastPos() + tabellaDati.AltezzaTabella + marginePiramide + 5;
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("TOTALE PATRIMONIO", x, y, 120, 10, Globals.OpenTypeFontVerdanaB, 9, ceTe.DynamicPDF.TextAlign.Right));
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(totalePatrimonioCalcolato.ToString(), datitab.getX()+135, y, 120, 10, Globals.OpenTypeFontVerdanaB, 9, ceTe.DynamicPDF.TextAlign.Right));
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(totaleControvaloreProtettoCalcolato.ToString(), datitab.getX() + 225, y, 120, 10, Globals.OpenTypeFontVerdanaB, 9, ceTe.DynamicPDF.TextAlign.Right));
           
            
            //DataSetS331.TotalePatrimonioRow rowDSS331TotalePatrimonio;
            //rowDSS331TotalePatrimonio = ds331.TotalePatrimonio.NewTotalePatrimonioRow();

            //rowDSS331TotalePatrimonio.Descrizione = "TOTALE PATRIMONIO";

            //decimal totalePatrimonio = totalePatrimonioCalcolato;
            //rowDSS331TotalePatrimonio.ControValore = conv.ConvertNum(totalePatrimonio);

            //decimal totaleControvaloreProtetto = totaleControvaloreProtettoCalcolato;
            //rowDSS331TotalePatrimonio.ControvaloreProtetto = conv.ConvertNum(totaleControvaloreProtetto);

            //ds331.TotalePatrimonio.AddTotalePatrimonioRow(rowDSS331TotalePatrimonio);


            #endregion


            
            
            //aggiungo la nota incondizionatamente
            dim += (datitab.GetRowDim() * datitab.getNumRow()) + 100;
            addNota(document);//vedi s134.cs


            document.setHeaderSpace(0);
            document.addPage();

        }

        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''");
            //FC 26062015 Aggionamento nuova Ragione Sociale
            doc.setSezFooter("(*)Le linee protette ''Fideuram Vita Insieme My Protection 80 Credit Suisse'' e ''Fideuram Vita Insieme My Protection 80 Citigroup'' che lei detiene presso Fideuram, prevedono una protezione del capitale pari all'80% del controvalore massimo raggiunto dalla data di partenza: il ''controvalore protetto'' è stato distribuito sulle aree di bisogno sulla base del peso percentuale del controvalore del singolo fondo, rispetto al controvalore complessivo della linea, disponibile al momento della produzione del report.",dim);
            //doc.StampaNote("(*) Alcuni prodotti non rientrano nel calcolo del rendimento. Il dettaglio del patrimonio non considerato viene fornito nel capitolo ''Patrimonio non rappresentabile''");
        }

        private void headerChart(ceTe.DynamicPDF.Page page, float x, float y)
        {
            //Header grafico a farfalla
            //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(x + 100, y + 2, 10, 5, 0, new RgbColor(121, 142, 185)));
            //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(x + 100, y - 9, 10, 5, 0, new RgbColor(239, 65, 53)));
            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Contributo alla protezione (%)", x-30, y, 140, 10, Globals.OpenTypeFontVerdana, 9, ceTe.DynamicPDF.TextAlign.Right));
            //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label("Piramide Attuale", x - 25, y - 11, 120, 10, Globals.OpenTypeFontVerdana, 9, ceTe.DynamicPDF.TextAlign.Right));
            //////
        }
    }
}