using System;
using System.Web;
using System.Text;
using System.Data;
using System.Collections;
using System.Collections.Generic;

namespace PDFGenerator.BusinessLayer.DataSection
{

    public class DSS146RischioDiversificazione : IDataSection
    {
        private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        private TipoReport _tiporeport;

        /// <summary>
        /// Tipologia report.
        /// </summary>
        public TipoReport TipoReport
        {
            get
            {
                return _tiporeport;
            }
            set
            {
                _tiporeport = value;
            }
        }


        public DataSectionResult getDataSection(List<SessionStruct> tabelleSessione, string querySql, DataThread dataThread)
        {
            try {
                DataSectionResult dsr = new DataSectionResult();

                FormatNum conv = new FormatNum();
                DataSetS146 dS146 = new DataSetS146();
                DataSetS146.RischioDiversificazioneRow dr;
                DataSetS146.RischioPatrimonioFinanziarioRow patrimonioFinanziario;
                DataSetS146.RischioDiversificazioneTableRow rischioDiversificazione;


                dS146.RischioDiversificazione.Columns["Copertura"].Caption = "Copertura <BR> (%)";

                DataTable dt = SectionManager.GetDataSection(tabelleSessione, querySql, dataThread);

                //V If I have only BF/SPI or if the report type is Monitoring I have to display only the first row of the query,
                if (dt.Rows.Count > 0 && (dt.Rows.Count < 3 || dataThread.TipoReport.ToUpper() == "MONITORAGGIO"))
                {
                    DataRow row = dt.Rows[0];
                    dr = dS146.RischioDiversificazione.NewRischioDiversificazioneRow();
                    dr.patrimonio = row["patrimonio"].ToString();
                    //V non veniva fatto il caso del var a stringa (nc)
                    /*
                    if (row["varString"] != DBNull.Value)
                        dr.var = row["varString"].ToString();
                    else
                        dr.var = row["var"].ToString();
                    */

                    //// MZ: Show n.c. as a value for VAR if there is no coverage
                    //if (row["coperturaString"] != DBNull.Value)
                    //{
                    //    dr.varString = row["varString"].ToString();

                    //}
                    //else
                    //{
                    //    dr.varString = Convert.ToDecimal(row["var"]).ToString();
                    //}

                    dr.var = Convert.ToDecimal(row["var"]);
                    if (row["coperturaString"] != DBNull.Value)
                        dr.copertura = row["coperturaString"].ToString();
                    else
                        dr.copertura = conv.ConvertNum(row["copertura"]);
                    dr.diversificazione = Convert.ToDecimal(row["diversificazione"]);
                    dS146.RischioDiversificazione.Rows.Add(dr);

                    patrimonioFinanziario = dS146.RischioPatrimonioFinanziario.NewRischioPatrimonioFinanziarioRow();
                    int profilo_code = Convert.ToInt32(row["profiloCode"]);
                    //patrimonioFinanziario.descrizioneProfilo = "Profilo Cliente: " + profilo_code.ToString();
                    string valoreProfilo = getProfiloName(profilo_code);
                    patrimonioFinanziario.descrizioneProfilo = "Profilo Cliente: " + valoreProfilo;
                    patrimonioFinanziario.valoreProfilo = profilo_code.ToString();
                    patrimonioFinanziario.var = Convert.ToDecimal(SoglieVar.ConvOld(row["var_Profilo"]));
                    dS146.RischioPatrimonioFinanziario.Rows.Add(patrimonioFinanziario);

                    rischioDiversificazione = dS146.RischioDiversificazioneTable.NewRischioDiversificazioneTableRow();
                    rischioDiversificazione.patrimonio = row["patrimonio"].ToString();
                    // MZ: Show n.c. as a value for VAR if there is no coverage
                    if (row["varString"] != DBNull.Value)
                    {
                        rischioDiversificazione.varString = row["varString"].ToString();

                    }
                    else
                    {
                        rischioDiversificazione.varString = conv.ConvertNum(row["var"], 2).ToString();
                    }
                    //dr.var = Convert.ToDecimal(row["var"]);
                    if (row["coperturaString"] != DBNull.Value)
                        rischioDiversificazione.copertura = row["coperturaString"].ToString();
                    else
                        rischioDiversificazione.copertura = conv.ConvertNum(row["copertura"]);
                    rischioDiversificazione.diversificazione = Convert.ToDecimal(row["diversificazione"]);
                    dS146.RischioDiversificazioneTable.Rows.Add(rischioDiversificazione);

                }
                else
                    if (dt.Rows.Count > 0)
                    foreach (DataRow row in dt.Rows)
                    {
                        dr = dS146.RischioDiversificazione.NewRischioDiversificazioneRow();
                        dr.patrimonio = row["patrimonio"].ToString();
                        //V non veniva fatto il caso del var a stringa (nc)
                        /*
                        if (row["varString"] != DBNull.Value)
                            dr.var = row["varString"].ToString();
                        else

                        dr.var = row["var"].ToString();
                        */
                        dr.var = Convert.ToDecimal(row["var"]);

                        if (row["coperturaString"] != DBNull.Value)
                            dr.copertura = row["coperturaString"].ToString();
                        else
                            dr.copertura = conv.ConvertNum(row["copertura"]);
                        dr.diversificazione = Convert.ToDecimal(row["diversificazione"]);
                        dS146.RischioDiversificazione.Rows.Add(dr);

                        patrimonioFinanziario = dS146.RischioPatrimonioFinanziario.NewRischioPatrimonioFinanziarioRow();
                        int profilo_code = Convert.ToInt32(row["profiloCode"]);
                        //patrimonioFinanziario.descrizioneProfilo = "Profilo Cliente: " + profilo_code.ToString();
                        string valoreProfilo = getProfiloName(profilo_code);
                        patrimonioFinanziario.descrizioneProfilo = "Profilo Cliente: " + valoreProfilo;
                        patrimonioFinanziario.valoreProfilo = profilo_code.ToString();
                        patrimonioFinanziario.var = Convert.ToDecimal(SoglieVar.ConvOld(row["var_profilo"]));
                        dS146.RischioPatrimonioFinanziario.Rows.Add(patrimonioFinanziario);


                        rischioDiversificazione = dS146.RischioDiversificazioneTable.NewRischioDiversificazioneTableRow();
                        rischioDiversificazione.patrimonio = row["patrimonio"].ToString();
                        // MZ: Show n.c. as a value for VAR if there is no coverage
                        if (row["varString"] != DBNull.Value)
                        {
                            rischioDiversificazione.varString = row["varString"].ToString();

                        }
                        else
                        {
                            rischioDiversificazione.varString = conv.ConvertNum(row["var"], 2).ToString();
                        }
                        //dr.var = Convert.ToDecimal(row["var"]);
                        if (row["coperturaString"] != DBNull.Value)
                            rischioDiversificazione.copertura = row["coperturaString"].ToString();
                        else
                            rischioDiversificazione.copertura = conv.ConvertNum(row["copertura"]);
                        rischioDiversificazione.diversificazione = Convert.ToDecimal(row["diversificazione"]);
                        dS146.RischioDiversificazioneTable.Rows.Add(rischioDiversificazione);

                    }



                dsr.DatiSezione = dS146;
                dsr.Esito = dS146.RischioDiversificazione.Rows.Count;

                return dsr;
            }catch(Exception ex){
                try { 
                logger.Error(string.Concat(ex.Message, dataThread.CodiceFiscale, " varProfilo issue from ", querySql));
                }
                catch { }
            }
            return null;
        }

        private string getProfiloName(int profilo_code)
        {
            string valoreProfilo = string.Empty;
            #region SWITCH CODICI PROFILO
            switch (profilo_code)
            {
                case 1:
                    valoreProfilo += " Prudente";
                    break;
                case 2:
                    valoreProfilo += " Moderato";
                    break;
                case 3:
                    valoreProfilo += " Equilibrato";
                    break;
                case 4:
                    valoreProfilo += " Dinamico";
                    break;
                case 5:
                    valoreProfilo += " Aggressivo";
                    break;
                default:
                    break;
            }
            #endregion
            return valoreProfilo;
        }
    }
}