using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using ceTe.DynamicPDF;
using ceTe.DynamicPDF.Text;
using PDFGenerator.Presentation.Section.Tables;
using PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.BusinessLayer;
using ceTe.DynamicPDF.Merger;

namespace PDFGenerator.Presentation.Section
{
    public class S165 : ISezione
    {

        DataThread dsParam = null;
        string notaGradoCopertura = string.Empty;
        ImportedPage page;

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



        public void writeSezione(DataThread dataThread)
        {

            DocumentPDF document = dataThread.DocumentPDF;

            DatiTabella datitab = new DatiTabella();
            DataSetS165 set = (DataSetS165)dataThread.Data.DatiSezione;
            datitab.table = set.Tables["Fondi"];
            dsParam = dataThread;

            if (document.checkMargin(datitab.GetRowDim() * (datitab.getNumRow() + 3)))
                document.addPage();
            document.setTitolo(dataThread.SezioneReport.Titolo);

            Tabella tabellaDati = new Tabella(document.getMargineLeft(), document.getLastPos());
            if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabellaDati.HeaderFont = 8;
            tabellaDati.Header = true;
            tabellaDati.Datasource = datitab.table;
            tabellaDati.Id = "tabellaS50";
            tabellaDati.AltezzaCella = 30;

            #region Settaggio delle Note di piè di pagina, delle note a piedi della tabella e degli * per i varProxati

            //Imposto le nota a pie di pagina.            
            ImpostaNote(datitab.table, tabellaDati.Id, ref document);


            //Nota a piedi della tabella
            // Imposto la nota a piedi della Tabella   
            notaGradoCopertura = datitab.table.Rows[0]["Copertura"] == DBNull.Value ? string.Empty : datitab.table.Rows[0]["Copertura"].ToString();
            if (notaGradoCopertura.Length > 0)
            {
                document.Note.Add(new Nota(Nota.TipologiaNota.GradoCopertura, tabellaDati.Id, notaGradoCopertura));
                tabellaDati.NotaTabella.Add(document.Note.Find(Nota.TipologiaNota.GradoCopertura, tabellaDati.Id).Testo);
            }


            #endregion


            if (dataThread.NumeroIntermediari > 1)
            {
                tabellaDati.Colonne.Add(new Colonna("Intermediario", "Intermediario", 105, TipoAllineamento.SINISTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("DataSottoscrizione", "Data sott.", 55, TipoAllineamento.SINISTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("Descrizione", "Descrizione", 157, TipoAllineamento.SINISTRA, false, 7, false));
                //tabellaDati.Colonne.Add(new Colonna("Aggiornamento", "Aggiornamento", 80, TipoAllineamento.SINISTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("Controvalore", "Controvalore (€)", 80, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("CreditRisk", "Rischio<BR>Credito", 65, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("Var", "Rischio<BR>(VaR %)", 50, TipoAllineamento.DESTRA, false, 7, false));
            }
            else
            {
                tabellaDati.Colonne.Add(new Colonna("DataSottoscrizione", "Data sott.", 55, TipoAllineamento.SINISTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("Descrizione", "Descrizione", 97, TipoAllineamento.SINISTRA, false, 7, false));
                //tabellaDati.Colonne.Add(new Colonna("Aggiornamento", "Aggiornamento", 80, TipoAllineamento.SINISTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("Controvalore", "Controvalore (€)", 80, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("TipoVersamento", "Tipo di versamento", 85, TipoAllineamento.SINISTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("Ammontare", "Ammontare versamento", 80, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("CreditRisk", "Rischio<BR>Credito", 65, TipoAllineamento.DESTRA, false, 7, false));
                tabellaDati.Colonne.Add(new Colonna("Var", "Rischio<BR>(VaR %)", 50, TipoAllineamento.DESTRA, false, 7, false));
            }
            datitab.setCellSpace(0);


            tabellaDati.Draw(datitab, document);


            datitab = new DatiTabella();
            datitab.table = set.Tables["FondiTotale"];



            Tabella tabellaTotale = new Tabella(document.getMargineLeft(), document.getLastPos() + tabellaDati.AltezzaTabella + 25);
            if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabellaTotale.HeaderFont = 8;
            tabellaTotale.SaltoPagina = false;
            tabellaTotale.Header = false;
            if (dataThread.NumeroIntermediari > 1)
            {
                tabellaTotale.Colonne.Add(new Colonna("Totale", "", 317, TipoAllineamento.SINISTRA, true, 8, true));
                tabellaTotale.Colonne.Add(new Colonna("Controvalore", "", 80, TipoAllineamento.DESTRA, true, 8, true));
                tabellaTotale.Colonne.Add(new Colonna("Var", "", 115, TipoAllineamento.DESTRA, true, 8, true));
            }
            else
            {
                tabellaTotale.Colonne.Add(new Colonna("Totale", "", 152, TipoAllineamento.SINISTRA, true, 8, true));
                tabellaTotale.Colonne.Add(new Colonna("Controvalore", "", 80, TipoAllineamento.DESTRA, true, 8, true));
                tabellaTotale.Colonne.Add(new Colonna("Var", "", 280, TipoAllineamento.DESTRA, true, 8, true));
            }

            string sVerticalText = "";
            ceTe.DynamicPDF.PageElements.TextArea testoPaginaVerticale = null;
            sVerticalText = "Le eventuali informazioni riguardanti investimenti da lei detenuti presso altri intermediari vengono elaborate secondo le indicazioni da lei ";
            //if (dataThread.Rete.Equals("F"))
            //{
            //    sVerticalText = sVerticalText + "fornite e/ o disponibili sul mercato, per le quali Fideuram non garantisce la completezza e la veridicità. ";
            //    sVerticalText = sVerticalText + "La preghiamo di comunicare a Fideuram ogni successiva variazione a tali informazioni, al fine di consentire a Fideuram la correzione e l’aggiornamento dei dati contenuti ";
            //    sVerticalText = sVerticalText + "nel presente report.Gli investimenti detenuti presso altri intermediari vengono utilizzati da Fideuram con finalità meramente informative e secondo le indicazioni da lei fornite, ";
            //    sVerticalText = sVerticalText + "in modo da offrire una rappresentazione unitaria degli investimenti, senza con ciò formare oggetto di raccomandazioni personalizzate o di rendicontazione ufficiale.";
            //}
            //else
            //{
            //    sVerticalText = sVerticalText + "fornite e/ o disponibili sul mercato, per le quali Sanpaolo Invest SIM non garantisce la completezza e la veridicità. ";
            //    sVerticalText = sVerticalText + "La preghiamo di comunicare a Sanpaolo Invest SIM ogni successiva variazione a tali informazioni, al fine di consentire a Sanpaolo Invest SIM la correzione e l’aggiornamento dei dati contenuti ";
            //    sVerticalText = sVerticalText + "nel presente report.Gli investimenti detenuti presso altri intermediari vengono utilizzati da Sanpaolo Invest SIM con finalità meramente informative e secondo le indicazioni da lei fornite, ";
            //    sVerticalText = sVerticalText + "in modo da offrire una rappresentazione unitaria degli investimenti, senza con ciò formare oggetto di raccomandazioni personalizzate o di rendicontazione ufficiale.";
            //}

            //************************************** Cecco modifiche dicitura IWBANK***********************************
            switch (dataThread.Rete)
            {
                case "F":
                    {
                        sVerticalText = sVerticalText + "fornite e/ o disponibili sul mercato, per le quali Fideuram non garantisce la completezza e la veridicità. ";
                        sVerticalText = sVerticalText + "La preghiamo di comunicare a Fideuram ogni successiva variazione a tali informazioni, al fine di consentire a Fideuram la correzione e l’aggiornamento dei dati contenuti ";
                        sVerticalText = sVerticalText + "nel presente report.Gli investimenti detenuti presso altri intermediari vengono utilizzati da Fideuram con finalità meramente informative e secondo le indicazioni da lei fornite, ";
                        sVerticalText = sVerticalText + "in modo da offrire una rappresentazione unitaria degli investimenti, senza con ciò formare oggetto di raccomandazioni personalizzate o di rendicontazione ufficiale.";
                        break;
                    }
                case "S":
                    {
                        sVerticalText = sVerticalText + "fornite e/ o disponibili sul mercato, per le quali Fideuram S.p.A. non garantisce la completezza e la veridicità. ";
                        sVerticalText = sVerticalText + "La preghiamo di comunicare a Fideuram S.p.A. ogni successiva variazione a tali informazioni, al fine di consentire alla Banca la correzione e l’aggiornamento dei dati contenuti ";
                        sVerticalText = sVerticalText + "nel presente report.Gli investimenti detenuti presso altri intermediari vengono utilizzati da Fideuram S.p.A., tramite la ‘‘rete di private banker Sanpaolo Invest’’ con finalità meramente informative e secondo le indicazioni da lei fornite, ";
                        sVerticalText = sVerticalText + "in modo da offrire una rappresentazione unitaria degli investimenti, senza con ciò formare oggetto di raccomandazioni personalizzate o di rendicontazione ufficiale.";
                        break;
                    }
                case "W":
                    {
                        sVerticalText = sVerticalText + "fornite e/ o disponibili sul mercato, per le quali IW Private Investments non garantisce la completezza e la veridicità. ";
                        sVerticalText = sVerticalText + "La preghiamo di comunicare a IW Private Investments ogni successiva variazione a tali informazioni, al fine di consentire a IW Private Investments la correzione e l’aggiornamento dei dati contenuti ";
                        sVerticalText = sVerticalText + "nel presente report.Gli investimenti detenuti presso altri intermediari vengono utilizzati da IW Private Investments con finalità meramente informative e secondo le indicazioni da lei fornite, ";
                        sVerticalText = sVerticalText + "in modo da offrire una rappresentazione unitaria degli investimenti, senza con ciò formare oggetto di raccomandazioni personalizzate o di rendicontazione ufficiale.";
                        break;
                    }
            }
            //*********************************************************************************************

            testoPaginaVerticale = new ceTe.DynamicPDF.PageElements.TextArea(sVerticalText, document.getMargineLeft() - 30, 750, 620, 100)
            {
                Angle = 270,
                Align = ceTe.DynamicPDF.TextAlign.Justify,
                FontSize = 5
            };

            page = document.getCurrentPage();
            page.Elements.Add(testoPaginaVerticale);

            tabellaTotale.Draw(datitab, document);

            // setto la posizione aggiornata
            document.setLastPos(tabellaTotale.AltezzaTabella + tabellaDati.AltezzaTabella);
        }


        //public void writeSezioneOLD(DataThread dataThread)
        //{

        //    DocumentPDF document = dataThread.DocumentPDF;

        //    DatiTabella datitab = new DatiTabella();
        //    DataSetS165 set = (DataSetS165)dataThread.Data.DatiSezione;
        //    datitab.table = set.Tables["Fondi"];
        //    dsParam = dataThread;

        //    if (document.checkMargin(datitab.GetRowDim() * (datitab.getNumRow() + 3)))
        //        document.addPage();
        //    document.setTitolo(dataThread.SezioneReport.Titolo);

        //    Tabella tabellaDati = new Tabella(document.getMargineLeft(), document.getLastPos());
        //    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabellaDati.HeaderFont = 8;
        //    tabellaDati.Header = true;
        //    tabellaDati.Datasource = datitab.table;
        //    tabellaDati.Id = "tabellaS50";
        //    tabellaDati.AltezzaCella = 30;
                
        //    #region Settaggio delle Note di piè di pagina, delle note a piedi della tabella e degli * per i varProxati

        //    //Imposto le nota a pie di pagina.            
        //    ImpostaNote(datitab.table, tabellaDati.Id, ref document);


        //    //Nota a piedi della tabella
        //    // Imposto la nota a piedi della Tabella   
        //    notaGradoCopertura = datitab.table.Rows[0]["Copertura"] == DBNull.Value ? string.Empty : datitab.table.Rows[0]["Copertura"].ToString();
        //    if (notaGradoCopertura.Length > 0)
        //    {
        //        document.Note.Add(new Nota(Nota.TipologiaNota.GradoCopertura, tabellaDati.Id, notaGradoCopertura));
        //        tabellaDati.NotaTabella.Add(document.Note.Find(Nota.TipologiaNota.GradoCopertura, tabellaDati.Id).Testo);
        //    }


        //    #endregion


        //    if (dataThread.NumeroIntermediari > 1)
        //    {
        //        tabellaDati.Colonne.Add(new Colonna("Intermediario", "Intermediario", 105, TipoAllineamento.SINISTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("DataSottoscrizione", "Data sott.", 55, TipoAllineamento.SINISTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("Descrizione", "Descrizione", 157, TipoAllineamento.SINISTRA, false, 7, false));
        //        //tabellaDati.Colonne.Add(new Colonna("Aggiornamento", "Aggiornamento", 80, TipoAllineamento.SINISTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("Controvalore", "Controvalore (€)", 80, TipoAllineamento.DESTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("CreditRisk", "Rischio<BR>Credito", 65, TipoAllineamento.DESTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("Var", "Rischio<BR>(VaR %)", 50, TipoAllineamento.DESTRA, false, 7, false));
        //    }
        //    else
        //    {
        //        tabellaDati.Colonne.Add(new Colonna("DataSottoscrizione", "Data sott.", 55, TipoAllineamento.SINISTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("Descrizione", "Descrizione", 97, TipoAllineamento.SINISTRA, false, 7, false));
        //        //tabellaDati.Colonne.Add(new Colonna("Aggiornamento", "Aggiornamento", 80, TipoAllineamento.SINISTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("Controvalore", "Controvalore (€)", 80, TipoAllineamento.DESTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("TipoVersamento", "Tipo di versamento", 85, TipoAllineamento.SINISTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("Ammontare", "Ammontare versamento", 80, TipoAllineamento.DESTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("CreditRisk", "Rischio<BR>Credito", 65, TipoAllineamento.DESTRA, false, 7, false));
        //        tabellaDati.Colonne.Add(new Colonna("Var", "Rischio<BR>(VaR %)", 50, TipoAllineamento.DESTRA, false, 7, false));
        //    }
        //    datitab.setCellSpace(0);


        //    tabellaDati.Draw(datitab, document);


        //    datitab = new DatiTabella();
        //    datitab.table = set.Tables["FondiTotale"];



        //    Tabella tabellaTotale = new Tabella(document.getMargineLeft(), document.getLastPos() + tabellaDati.AltezzaTabella + 25);
        //    if (dataThread.TipoReport.ToUpper() == "DIAGNOSI") tabellaTotale.HeaderFont = 8;
        //    tabellaTotale.SaltoPagina = false;
        //    tabellaTotale.Header = false;
        //    if (dataThread.NumeroIntermediari > 1)
        //    {
        //        tabellaTotale.Colonne.Add(new Colonna("Totale", "", 317, TipoAllineamento.SINISTRA, true, 8, true));
        //        tabellaTotale.Colonne.Add(new Colonna("Controvalore", "", 80, TipoAllineamento.DESTRA, true, 8, true));
        //        tabellaTotale.Colonne.Add(new Colonna("Var", "", 115, TipoAllineamento.DESTRA, true, 8, true));
        //    }
        //    else
        //    {
        //        tabellaTotale.Colonne.Add(new Colonna("Totale", "", 152, TipoAllineamento.SINISTRA, true, 8, true));
        //        tabellaTotale.Colonne.Add(new Colonna("Controvalore", "", 80, TipoAllineamento.DESTRA, true, 8, true));
        //        tabellaTotale.Colonne.Add(new Colonna("Var", "", 280, TipoAllineamento.DESTRA, true, 8, true));
        //    }



        //    tabellaTotale.Draw(datitab, document);

        //    // setto la posizione aggiornata
        //    document.setLastPos(tabellaTotale.AltezzaTabella + tabellaDati.AltezzaTabella);
        //}


        /// <summary>
        /// Verifica se nel datatable passato in input è presente almeno un campo della colonna  VarProxato con valore 1.
        /// Se si aggiungo al documento un oggetto Nota di tipo VarProxato e aggiungo al valore del campo VaR gli *.
        /// La S50 può avere le note a fondo pagina solo per i var proxati.
        /// </summary>
        /// <param name="dataTable">fonte dati</param>
        /// <param name="idtabellaassociata">id della tabella a cui andrà associata la nota</param>
        /// <param name="document">documento</param>
        private void ImpostaNote(DataTable dataTable, string idtabellaassociata, ref DocumentPDF document)
        {
            DataRow[] drVarProxato = dataTable.Select("VarProxato=1");

            if (drVarProxato.Length > 0)
                if (!document.Note.Exists(delegate(Nota t) { return t.TipoNota == Nota.TipologiaNota.VarProxato; }))
                    document.Note.Add(new Nota(Nota.TipologiaNota.VarProxato, idtabellaassociata, Resource.Nota_VarProxato));

            //aggiungo al valore del campo VaR gli *
            foreach (DataRow row in drVarProxato)
            {
                if (row["VaR"].ToString().ToLower() != "n.c.")
                    row["VaR"] += document.Note.Find(delegate(Nota nota) { return nota.TipoNota == Nota.TipologiaNota.VarProxato; }).ToString();

            }

        }

    }
}