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 DSS128ProfiliRischioAdeguatezza : IDataSection
    {

        private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        public DSS128ProfiliRischioAdeguatezza()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        #region IDataSection Members

        /// <summary>
        /// Implement the getDataSection function of the interface IDataSection.
        /// </summary>
        /// <param name="tabelleSessione"></param>
        /// <param name="querySql"> Sql Statment to be executed to return the Profile Risk of the certain customer in a certain network</param>
        /// <param name="dataThread"></param>
        /// <returns> Data Table to be shown in the report</returns>
        public DataSectionResult getDataSection(List<SessionStruct> tabelleSessione, string querySql, DataThread dataThread)
        {
            try
            {
                DataSectionResult customerProfiliRischioAdeguatezzaDataSectionResult = new DataSectionResult();

                //Random rnd = new Random();
                DataRow customerProfiliRischioAdeguatezzaDataRow;
                DataTable customerProfiliRischioAdeguatezzaDataTable = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread);
                DataSetS128 customerProfiliRischioAdeguatezzaRecordsDataSetS128 = new DataSetS128();

                if (dataThread.profiloIsAct && customerProfiliRischioAdeguatezzaDataTable.Rows.Count > 0)
                {
                    int profiloRischioClienteAssegnato = Convert.ToInt32(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["codiceProfilo"]);


                    #region Creazione righe datatable ProfiloRischio
                    // Profilo di Rischio

                    customerProfiliRischioAdeguatezzaDataRow = customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiloRischio.NewRow();
                    customerProfiliRischioAdeguatezzaDataRow["Descrizione"] = "Profilo Finanziario";
                    customerProfiliRischioAdeguatezzaDataRow["Valore"] = customerProfiliRischioAdeguatezzaDataTable.Rows[0]["codiceProfilo"].ToString() + " " + customerProfiliRischioAdeguatezzaDataTable.Rows[0]["nomeProfilo"].ToString();
                    customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiloRischio.Rows.Add(customerProfiliRischioAdeguatezzaDataRow);

                    #endregion

                    #region Creazione righe datatable Colonne 
                    // Colonne

                    customerProfiliRischioAdeguatezzaDataRow = customerProfiliRischioAdeguatezzaRecordsDataSetS128.ColonneRed.NewRow();
                    customerProfiliRischioAdeguatezzaDataRow["Limite"] = "Limite massimo profilo finanziario";
                    customerProfiliRischioAdeguatezzaDataRow["Patrimonio"] = "Patrimonio " + dataThread.NomeRete;
                    customerProfiliRischioAdeguatezzaRecordsDataSetS128.ColonneRed.Rows.Add(customerProfiliRischioAdeguatezzaDataRow);

                    #endregion


                    string varr = SoglieVar.ConvOld(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["varMassimo"]);
                    if (dataThread.IsProffesionalClient && dataThread.RiskArea == 5)
                        varr = "50,00";

                    string x = customerProfiliRischioAdeguatezzaDataTable.Rows[0]["varPatrimonioBF"].ToString();

                    #region Creazione righe datatable Rischio Mercato
                    // Rischio Mercato
                    customerProfiliRischioAdeguatezzaDataRow = customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiliRischioAdeguatezza.NewRow();
                    customerProfiliRischioAdeguatezzaDataRow["Descrizione"] = "Rischio Mercato (VaR%)";
                    customerProfiliRischioAdeguatezzaDataRow["LimiteMax"] = varr;
                    customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = customerProfiliRischioAdeguatezzaDataTable.Rows[0]["varPatrimonioBF"].ToString();
                    customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiliRischioAdeguatezza.Rows.Add(customerProfiliRischioAdeguatezzaDataRow);

                    #endregion

                    #region Creazione righe datatable Rischio Credito
                    // Rischio Credito
                    customerProfiliRischioAdeguatezzaDataRow = customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiliRischioAdeguatezza.NewRow();
                    customerProfiliRischioAdeguatezzaDataRow["Descrizione"] = "Rischio Credito";
                    customerProfiliRischioAdeguatezzaDataRow["LimiteMax"] = UtilityBusinessLayer.GetRiskCreditClassName(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["RiskClass"].ToString());
                    if (UtilityBusinessLayer.GetRiskCreditClassName(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["riskClassBF"].ToString()) == "")
                        customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = "n.a.";
                    else
                        customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = UtilityBusinessLayer.GetRiskCreditClassName(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["riskClassBF"].ToString());
                    customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiliRischioAdeguatezza.Rows.Add(customerProfiliRischioAdeguatezzaDataRow);

                    #endregion

                    #region Creazione righe datatable Complessità
                    // Rischio Credito
                    customerProfiliRischioAdeguatezzaDataRow = customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiliRischioAdeguatezza.NewRow();
                    customerProfiliRischioAdeguatezzaDataRow["Descrizione"] = "Complessità";
                    //customerProfiliRischioAdeguatezzaDataRow["LimiteMax"] = UtilityBusinessLayer.GetRiskCreditClassName(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["RiskClass"].ToString());
                    //if (UtilityBusinessLayer.GetRiskCreditClassName(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["riskClassBF"].ToString()) == "")
                    //    customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = "n.a.";
                    //else
                    //    customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = UtilityBusinessLayer.GetRiskCreditClassName(customerProfiliRischioAdeguatezzaDataTable.Rows[0]["riskClassBF"].ToString());
                    //customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiliRischioAdeguatezza.Rows.Add(customerProfiliRischioAdeguatezzaDataRow);

                    //MIFID2 20180702 CR Napolitano
                    // Per i clienti professionali i valori relativi alla Complessità vanno impostati a "n.a."
                    if (dataThread.IsProffesionalClient)
                    {
                        customerProfiliRischioAdeguatezzaDataRow["LimiteMax"] = "n.a.";
                        //20180914 su segnalazione Napolitano
                        //customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = "n.a.";
                        customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = customerProfiliRischioAdeguatezzaDataTable.Rows[0]["LimiteComplessitaPatrimonio"].ToString();
                        //--20180914
                    }
                    else
                    {
                        customerProfiliRischioAdeguatezzaDataRow["LimiteMax"] = customerProfiliRischioAdeguatezzaDataTable.Rows[0]["LimiteComplessitaProfilo"].ToString();
                        customerProfiliRischioAdeguatezzaDataRow["ValoreBF"] = customerProfiliRischioAdeguatezzaDataTable.Rows[0]["LimiteComplessitaPatrimonio"].ToString();
                    }
                    customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiliRischioAdeguatezza.Rows.Add(customerProfiliRischioAdeguatezzaDataRow);
                    #endregion

                }
                customerProfiliRischioAdeguatezzaDataSectionResult.DatiSezione = customerProfiliRischioAdeguatezzaRecordsDataSetS128;
                customerProfiliRischioAdeguatezzaDataSectionResult.Esito = customerProfiliRischioAdeguatezzaRecordsDataSetS128.ProfiloRischio.Rows.Count;

                //MIFID2 20180531 Gestire anche la copertura (serve per il testo sulla copertura nella S128
                DataRow CoperturaRow = customerProfiliRischioAdeguatezzaRecordsDataSetS128.Copertura.NewRow();
                CoperturaRow["Valore"] = customerProfiliRischioAdeguatezzaDataTable.Rows[0]["CoperturaBF"].ToString();
                customerProfiliRischioAdeguatezzaRecordsDataSetS128.Copertura.Rows.Add(CoperturaRow);
                //--MIFID2

                return customerProfiliRischioAdeguatezzaDataSectionResult;
            }
            catch (Exception ex)
            {
                try
                {
                    logger.Error(String.Concat(ex.Message, " ", dataThread.CodiceFiscale));
                }
                catch { }
                throw ex;
            }
        }

        #endregion
    }
}