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 PDFGenerator.BusinessLayer.DataSection;
using PDFGenerator.BusinessLayer;
using System.Collections.Generic;

namespace PDFGenerator.BusinessLayer.DataSection
{
    class DSS147SintesiValute: IDataSection
    {
        private const int NUM_VALUTE = 6;

        public DSS147SintesiValute()
        {
        }
        //public DataSectionResult getDataSection(IDataSectionParameter dsp)
        //{
        #region IDataSection Members
        public DataSectionResult getDataSection(List<SessionStruct> tabelleSessione, string querySql, DataThread dataThread)
        {
             
        
            DataSectionResult dsr = new DataSectionResult();
            //DataSectionParameter dataSectionParameter = (DataSectionParameter)dsp;

            //DSS118RappresentazionePerValuta dss118 = new DSS118RappresentazionePerValuta();
            //DataSectionResult output118 = dss118.getDataSection(dsp);

            //DataTable totalePatrimoni = output118.DatiSezione.Tables["Patrimoni"];
            //if (totalePatrimoni == null)
            //    return dsr;

            //DataView dw = new DataView(totalePatrimoni);
            //dw.RowFilter = "CodicePatrimonio='BF'";
            //totalePatrimoni = dw.ToTable();

            FormatNum conv = new FormatNum();
            DataSetS147 ds147 = new DataSetS147();
            DataSetS147.PesiValutePositiveRow rowGraficoPositiva = ds147.PesiValutePositive.NewPesiValutePositiveRow();
            DataSetS147.PesiValuteNegativeRow rowGraficoNegativa = ds147.PesiValuteNegative.NewPesiValuteNegativeRow();
            DataSetS147.PesiValuteTotaliRow rowTotali = ds147.PesiValuteTotali.NewPesiValuteTotaliRow();

            //V Se il cliente ha solo cc negativo la sezione non deve uscire 
            if (dataThread.PatrimonioBancaFideuramCtvAlNettoContoCorrente == 0)            
                                                                         return dsr;

                DataTable datiValute = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread);
                
                if (datiValute.Rows.Count == 0)
                    return dsr;

                int k = 0;
                decimal pesoAltreValute100 = 100;
                decimal pesoAltreValute0 = 0;
                double copertura = 1.00;
                foreach (DataRow dr in datiValute.Rows)
                {
                    decimal peso = Decimal.Round(Convert.ToDecimal(dr["percentuale"].ToString()), 2, MidpointRounding.AwayFromZero);
                    pesoAltreValute100 -= peso;

                    if (k < NUM_VALUTE)
                    {
                        string codiceValuta = "PesoPercentualeValuta" + (k + 1).ToString();

                        //double peso = Convert.ToDouble(dr["percentuale"].ToString());// Convert.ToDouble(totalePatrimoni.Rows[0][codiceValuta]); // Il peso lo prendo dalla dss118 Math.Round(Convert.ToDouble(dr["PESO"]),2);

                         

                        rowTotali.Peso = (double)peso;
                        rowTotali.Valuta = dr["DIVISA"].ToString();
                        rowTotali.Bandiera = "";
                        rowTotali.Pallino = "";
                        //pesoAltreValute -= rowGrafico.Peso;
                        rowTotali.Copertura = Convert.ToDouble(dr["COPERTURA"]);
                        copertura = rowTotali.Copertura;
                        ds147.PesiValuteTotali.Rows.Add(rowTotali);
                        rowTotali = ds147.PesiValuteTotali.NewPesiValuteTotaliRow();



                        if (peso >= 0)
                        {
                            rowGraficoPositiva.Peso = (double)peso;
                            rowGraficoNegativa.Peso = 0;
                        }
                        else
                        {
                            rowGraficoPositiva.Peso = 0;
                            rowGraficoNegativa.Peso = (double)-peso;
                        }

                        //Parte positiva
                        rowGraficoPositiva.Valuta = dr["DIVISA"].ToString();
                        rowGraficoPositiva.Bandiera = "";
                        rowGraficoPositiva.Pallino = "";
                        //pesoAltreValute -= rowGrafico.Peso;
                        rowGraficoPositiva.Copertura = Convert.ToDouble(dr["COPERTURA"]);
                        copertura = rowGraficoPositiva.Copertura;
                        ds147.PesiValutePositive.Rows.Add(rowGraficoPositiva);
                        rowGraficoPositiva = ds147.PesiValutePositive.NewPesiValutePositiveRow();


                        rowGraficoNegativa.Valuta = dr["DIVISA"].ToString();
                        rowGraficoNegativa.Bandiera = "";
                        rowGraficoNegativa.Pallino = "";
                        //pesoAltreValute -= rowGrafico.Peso;
                        rowGraficoNegativa.Copertura = Convert.ToDouble(dr["COPERTURA"]);
                        copertura = rowGraficoNegativa.Copertura;
                        ds147.PesiValuteNegative.Rows.Add(rowGraficoNegativa);
                        rowGraficoNegativa = ds147.PesiValuteNegative.NewPesiValuteNegativeRow();

                        ++k;
                    }
                    else
                    {
                        pesoAltreValute0 += peso;
                    }
                }
                pesoAltreValute0 += pesoAltreValute100;
                     
                if (pesoAltreValute0 != 0)
                {

                    //pesoAltreValute = 0.0;// Convert.ToDouble(totalePatrimoni.Rows[0]["PesoPercentualeAltre"]); // Se ho peso altre valute lo prendo corretto dalla s118 Math.Round(pesoAltreValute, 2);

                    if (pesoAltreValute0 > 0)
                    {
                        rowGraficoPositiva.Peso = (double)pesoAltreValute0;
                        rowGraficoNegativa.Peso = 0;
                    }
                    else
                    {
                        rowGraficoPositiva.Peso = 0;
                        rowGraficoNegativa.Peso = (double)-pesoAltreValute0;
                    }


                    rowTotali.Peso = (double)pesoAltreValute0;
                    rowTotali.Valuta = "ALTRE";
                    rowTotali.Bandiera = "";
                    rowTotali.Pallino = "";
                    //pesoAltreValute -= rowGrafico.Peso;
                    rowTotali.Copertura = copertura;
                    copertura = rowTotali.Copertura;
                    ds147.PesiValuteTotali.Rows.Add(rowTotali);
                    rowTotali = ds147.PesiValuteTotali.NewPesiValuteTotaliRow();

                    rowGraficoPositiva.Valuta = "ALTRE";
                    rowGraficoPositiva.Bandiera = "";
                    rowGraficoPositiva.Pallino = "";
                    //pesoAltreValute -= rowGrafico.Peso;
                    rowGraficoPositiva.Copertura = copertura;
                    copertura = rowGraficoPositiva.Copertura;
                    ds147.PesiValutePositive.Rows.Add(rowGraficoPositiva);
                    rowGraficoPositiva = ds147.PesiValutePositive.NewPesiValutePositiveRow();


                    rowGraficoNegativa.Valuta = "ALTRE";
                    rowGraficoNegativa.Bandiera = "";
                    rowGraficoNegativa.Pallino = "";
                    //pesoAltreValute -= rowGrafico.Peso;
                    rowGraficoNegativa.Copertura = copertura;
                    copertura = rowGraficoNegativa.Copertura;
                    ds147.PesiValuteNegative.Rows.Add(rowGraficoNegativa);
                    rowGraficoNegativa = ds147.PesiValuteNegative.NewPesiValuteNegativeRow();


                }
                  

            dsr.DatiSezione = ds147;
            dsr.Esito = ds147.PesiValutePositive.Rows.Count;
            try{if ((Convert.ToDouble(ds147.PesiValuteTotali.Rows[0]["Copertura"]) * 100) < 50) dsr.Esito = 0;} catch {}
            return dsr;
        }
        #endregion
    }
}