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 System.Threading;
using System.Globalization;
using ContrattoSei.Utilities;

namespace PDFGenerator.Presentation.Section {
    public class S18 : SProfiloDiRischio, ISezione {
      
        bool indice = false;
        bool legend = false;
        DatiTabella datitab;

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

        #region ISezione Members

        public void writeSezione(DataThread dataThread) {
            DocumentPDF document = dataThread.DocumentPDF;
            datitab = new DatiTabella();
            DataSetS18 set = (DataSetS18)dataThread.Data.DatiSezione;

            datitab.table = set.Tables["RischioFinanziarioVarTotali"];
            string sCulture = UtilityManager.getAppSetting("CultureToUse");

            Thread.CurrentThread.CurrentCulture = new CultureInfo(sCulture);

            Thread.CurrentThread.CurrentUICulture = new CultureInfo(sCulture);
            Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ",";


            //eventuali operazioni sul dataset
            //calcola se entra nella pagina altrimenti aggiunge una nuova pagina. In questa sezione il # di righe � fissato
            if (document.checkMargin(140)) document.addPage();

            //aggiorna l'indice
            if (indice) document.setSezTitolo(dataThread.SezioneReport.Titolo);

            dsParam = dataThread;
            //i due parametri devono essere presi da la datatable corrispondente


            if (dsParam.profiloIsAct)
                this.creaTabellaS18(document, (float)(int)set.RischioPatrimonioFinanziario.Rows[0]["Profilo"], datitab.table);
            else
                this.creaTabellaS18(document, 0.00F, datitab.table);
            FormatNum conv = new FormatNum();
            if (set.Tables["GradoCopertura"] != null)
                if (set.Tables["GradoCopertura"].Rows.Count > 0)
                    if (!legend && Convert.ToDecimal(set.Tables["GradoCopertura"].Rows[0]["totale"]) < 100)
                        document.setSezFooter("Grado di copertura: " + conv.ConvertNum(set.Tables["GradoCopertura"].Rows[0]["totale"]) + "%", 150);

            document.setLastPos(160);

        }

        public void setIndice() {
            indice = true;
        }

        private void creaTabellaS18(DocumentPDF document, float var1, DataTable tab) {
            float yLabel = document.getLastPos() - 1;
            float yDistanceHeaderLabel = 27;
            float xMacroAsset = document.getMargineLeft() + 110;
            float xControvalore = xMacroAsset + 110;
            float xImg = document.getMargineLeft() + 143;
            float xRect = xMacroAsset + 98;
            float yRect = yLabel - 4;
            float yImg = document.getLastPos() + 27;
            //float widthRect = 26;
            //float heigthRect = 16;
            float widthMacroAsset = 120;
            //float widthControvalore = 80;
            float fontSize = 9;
            float heightLabel = 11;
            //OpenTypeFont font;
            OpenTypeFont font2 = Globals.OpenTypeFontVerdana;
            FormatNum conv = new FormatNum();
            ceTe.DynamicPDF.Merger.ImportedPage page = document.getCurrentPage();
            ceTe.DynamicPDF.PageElements.Rectangle rect;
            int numStep = 5 - 1;

            bool _hasPortafoglioBancaFideuram = false;
            bool _hasPortafoglioAltriIstituti = false;

            this.creaTabella(document, var1);


            if (legend) {
                float varComplessivo = -1;
                float varTerzi = -1;
                float varBancaFideuram = -1;
                string varTerziString = "VaR ";
                string varBancaFideuramString = "VaR ";
                string varComplessivoString = "VaR ";

                foreach (DataRow myRow in tab.Rows) 
                {
                    switch (myRow["Descrizione"].ToString()) 
                    {
                        //FC 26062015 Aggionamento nuova Ragione Sociale
                        case "Portafoglio Fideuram":
                        //Marker DX1                            
                        if ((myRow["Var"] == System.DBNull.Value) || (Convert.ToSingle(myRow["Var"]) == 0.0))
                        {
                            varBancaFideuramString += myRow["VarString"].ToString();
                        }
                        else
                        {
                            varBancaFideuram = (Convert.ToSingle(myRow["Var"]));
                            varBancaFideuramString += conv.ConvertNum(varBancaFideuram) + "%";
                        }

                        rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 155, yImg + ((numStep - MarkPosition(varBancaFideuram)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 0, 0));
                        rect.Angle = 45;
                        page.Elements.Add(rect);
                        rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 160, yImg + ((numStep - MarkPosition(varBancaFideuram)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 255, 255));
                        rect.Angle = 45;
                        page.Elements.Add(rect);
                        rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 165, yImg + ((numStep - MarkPosition(varBancaFideuram)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(0, 0, 0));
                        rect.Angle = 45;
                        page.Elements.Add(rect);
                        page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(varBancaFideuramString, xImg + 173, yImg - 5 + ((numStep - MarkPosition(varBancaFideuram)) * yDistanceHeaderLabel) + 4, widthMacroAsset + 70, heightLabel, Globals.OpenTypeFontVerdana, fontSize));
                        _hasPortafoglioBancaFideuram = true;
                        break;

                        
                        case "Portafoglio Altri Istituti":
                            //Marker 2                            
                            if ((myRow["Var"] == System.DBNull.Value) || (Convert.ToSingle(myRow["Var"]) == 0.0))
                            {
                                varTerziString += myRow["VarString"].ToString();
                                //V
                                if (Convert.ToSingle(myRow["Var"]) == 0.0)
                                {
                                    varTerzi = Convert.ToSingle(myRow["Var"]);
                                    varTerziString += "0,00%";
                                }
                                //

                            }
                            else
                            {
                                varTerzi = Convert.ToSingle(myRow["Var"]);
                                varTerziString += conv.ConvertNum(varTerzi) + "%";
                            }
                            if (varBancaFideuram != -1 && MarkPosition(varBancaFideuram) == MarkPosition(varTerzi))
                                xImg += 70;
                            else {
                                rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 155, yImg + ((numStep - MarkPosition(varTerzi)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 0, 0));
                                rect.Angle = 45;
                                page.Elements.Add(rect);
                                rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 160, yImg + ((numStep - MarkPosition(varTerzi)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 255, 255));
                                rect.Angle = 45;
                                page.Elements.Add(rect);
                            }
                            rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 160, yImg + ((numStep - MarkPosition(varTerzi)) * yDistanceHeaderLabel), 10, 10, 0, new RgbColor(0, 0, 0));
                            rect.CornerRadius = 5;
                            page.Elements.Add(rect);
                            page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(varTerziString, xImg + 173, yImg - 5 + ((numStep - MarkPosition(varTerzi)) * yDistanceHeaderLabel) + 4, widthMacroAsset + 70, heightLabel, Globals.OpenTypeFontVerdana, fontSize));
                            _hasPortafoglioAltriIstituti = true;
                            break;

                        case "Portafoglio Complessivo":
                            if (_hasPortafoglioBancaFideuram && _hasPortafoglioAltriIstituti) // stampo il var complessivo solo in presenza sia di Patrimonio Banca Fideuram che di Patrimonio Terzi
                            {
                                //Marker 3
                                if ((myRow["Var"] == System.DBNull.Value) || (Convert.ToSingle(myRow["Var"]) == 0.0))
                                {
                                    varComplessivoString += myRow["VarString"].ToString();
                                }
                                else
                                {
                                    varComplessivo = Convert.ToSingle(myRow["Var"]);
                                    varComplessivoString += conv.ConvertNum(varComplessivo) + "%";
                                }
                                if (varTerzi != -1 && MarkPosition(varTerzi) == MarkPosition(varComplessivo))
                                    xImg += 70;
                                else
                                    if (varBancaFideuram != -1 && MarkPosition(varBancaFideuram) == MarkPosition(varComplessivo))
                                        xImg += 70;
                                    else
                                    {
                                        // xImg = document.getMargineLeft() + 163; DDD
                                        rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 155, yImg + ((numStep - MarkPosition(varComplessivo)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 0, 0));
                                        rect.Angle = 45;
                                        page.Elements.Add(rect);
                                        rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 160, yImg + ((numStep - MarkPosition(varComplessivo)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 255, 255));
                                        rect.Angle = 45;
                                        page.Elements.Add(rect);
                                    }

                                rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 161, yImg + 1 + ((numStep - MarkPosition(varComplessivo)) * yDistanceHeaderLabel), 8, 8, 0, new RgbColor(0, 0, 0));
                                //rect.CornerRadius = 5;
                                page.Elements.Add(rect);
                                page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(varComplessivoString, xImg + 173, yImg - 5 + ((numStep - MarkPosition(varComplessivo)) * yDistanceHeaderLabel) + 4, widthMacroAsset + 70, heightLabel, Globals.OpenTypeFontVerdana, fontSize));

                            }
                          
                            break;

                        default:
                            break;
                    }
                }
            }
            else {
                ////Marker DX1
                if (tab.Rows.Count != 0)
                {
                    float var2 = -1;
                    //FC 26062015 Aggionamento nuova Ragione Sociale
                    String var2String = "Portafoglio Fideuram VaR ";

                    if ((tab.Rows[0]["Var"] == System.DBNull.Value) || ((float)tab.Rows[0]["Var"] == 0.0))
                    {
                        var2String += tab.Rows[0]["VarString"].ToString();
                    }
                    else
                    {
                        var2 = (float)tab.Rows[0]["Var"];
                        var2String += conv.ConvertNum(var2) + "%";
                    }

                    rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 155, yImg + ((numStep - MarkPosition(var2)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 0, 0));
                    rect.Angle = 45;
                    page.Elements.Add(rect);
                    rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 160, yImg + ((numStep - MarkPosition(var2)) * yDistanceHeaderLabel), 10 / 1.414F, 10 / 1.414F, 0, new RgbColor(255, 255, 255));
                    rect.Angle = 45;
                    page.Elements.Add(rect);

                    //page.Elements.Add(new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 165, yImg - 5 + ((6 - MarkPosition(var2)) * yDistanceHeaderLabel), widthMacroAsset + 65, yDistanceHeaderLabel, 0, new RgbColor(232, 236, 237)));
                    //rect = new ceTe.DynamicPDF.PageElements.Rectangle(xImg + 165, yImg - 5 + ((6 - MarkPosition(var2)) * yDistanceHeaderLabel), yDistanceHeaderLabel / 1.414F, yDistanceHeaderLabel / 1.414F, 0, new RgbColor(232, 236, 237));
                    //rect.Angle = 45;
                    //page.Elements.Add(rect);
                    if (dsParam.Rete == "F")
                        page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(var2String, xImg + 170, yImg - 5 + ((numStep - MarkPosition(var2)) * yDistanceHeaderLabel) + 4, widthMacroAsset + 70, heightLabel, Globals.OpenTypeFontVerdana, fontSize));
                    else
                        page.Elements.Add(new ceTe.DynamicPDF.PageElements.Label(var2String, xImg + 170, yImg - 5 + ((numStep - MarkPosition(var2)) * yDistanceHeaderLabel) + 4, widthMacroAsset + 70, heightLabel, Globals.OpenTypeFontVerdana, fontSize));
                }
            }

        }

        #endregion

        public void setLegend() {
            legend = true;
        }

    }
}