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
{
    public class DSFD147SintesiValute : IDataSection
    {
        private const int NUM_VALUTE = 6;
        public StructColor toBeFound = new StructColor();

        public DSFD147SintesiValute()
        {
        }
        //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
    }
}