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

namespace PDFGenerator.BusinessLayer.DataSection
{
    class DSS168TabellaEmittenti : IDataSection
    {
        #region IDataSection Members

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

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

            dsr.Esito = dt.Rows.Count;
            if (dt.Rows.Count == 0)
            {
                return dsr;
            }
            FormatNum num = new FormatNum();

            DataSetS168 ds168 = new DataSetS168();
            DataSetS168.EmittentiRow emittente;
            DataRow[] filtrata;
            //DataView dw = new DataView(dt);//,"Institute= "+dataThread.Intermediario,
            //V il filtro va rivisto
           

            string intermediario = dataThread.Intermediario.Replace("'", "''").ToUpper().Trim();

            if (intermediario.Equals("BF") || intermediario.Equals("COMPLESSIVO"))
                filtrata = dt.Select("INTERMEDIARIO = '" + intermediario + "'");
            else
                filtrata = dt.Select("INTERMEDIARIO NOT IN ('BF','COMPLESSIVO')","concentration desc");

            //Devo rappresentare al più 3 righe
            int numRighe = 3;
            if (filtrata.Length < 3)
                numRighe = filtrata.Length; //filtrata.Rows.Count;

            //foreach (DataRow row in filtrata.Rows)
            for (int i = 0; i < numRighe; i++)
            {
                DataRow row = filtrata[i];
                bool rc1, rc2, rc3, rc4, rc5, rc6, rc7, rc8, rc9, rc10, nc;
                rc1 = Convert.ToBoolean(row["flg_riskclass1"]);
                rc2 = Convert.ToBoolean(row["flg_riskclass2"]);
                rc3 = Convert.ToBoolean(row["flg_riskclass3"]);
                rc4 = Convert.ToBoolean(row["flg_riskclass4"]);
                rc5 = Convert.ToBoolean(row["flg_riskclass5"]);
                rc6 = Convert.ToBoolean(row["flg_riskclass6"]);
                rc7 = Convert.ToBoolean(row["flg_riskclass7"]);
                rc8 = Convert.ToBoolean(row["flg_riskclass8"]);
                rc9 = Convert.ToBoolean(row["flg_riskclass9"]);
                rc10 = Convert.ToBoolean(row["flg_riskclass10"]);


                nc = Convert.ToBoolean(row["nc"]);
                emittente = ds168.Emittenti.NewEmittentiRow();
                emittente.Emittente = row["Issuer"].ToString();
                Int16 iCont = 0;

                bool multiclass = false;
                if (!rc1 && !rc2 && !rc3 && !rc4 && !rc5 && !rc6 && !rc7 && !rc8 && !rc9 && !rc10)
                    emittente.Rischio = "n.a.";
                if (!nc)
                {
                    if (rc1)
                    {
                        iCont++;
                        emittente.Rischio += "Rischio 1/10";
                        multiclass = true;
                    }
                    if (rc2)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 2/10";
                        else
                            emittente.Rischio += "Rischio 2/10";
                        multiclass = true;
                    }

                    if (rc3)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 3/10";
                        else
                            emittente.Rischio += "Rischio 3/10";
                        multiclass = true;
                    }
                    if (rc4)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 4/10";
                        else
                            emittente.Rischio += "Rischio 4/10";
                        multiclass = true;
                    }
                    if (rc5)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 5/10";
                        else
                            emittente.Rischio += "Rischio 5/10";
                        multiclass = true;
                    }
                    if (rc6)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 6/10";
                        else
                            emittente.Rischio += "Rischio 6/10";
                        multiclass = true;
                    }
                    if (rc7)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 7/10";
                        else
                            emittente.Rischio += "Rischio 7/10";
                        multiclass = true;
                    }
                    if (rc8)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 8/10";
                        else
                            emittente.Rischio += "Rischio 8/10";
                        multiclass = true;
                    }
                    if (rc9)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 9/10";
                        else
                            emittente.Rischio += "Rischio 9/10";
                        multiclass = true;
                    }
                    if (rc10)
                    {
                        iCont++;
                        if (multiclass)
                            emittente.Rischio += " - Rischio 10/10";
                        else
                            emittente.Rischio += "Rischio 10/10";
                        multiclass = true;
                    }

                    if (iCont > 4)
                    {
                        //emittente.Rischio = "Rischio 9/10 - Rischio 9/10 - Rischio 9/10 - Rischio 10/10";
                        //emittente.Rischio = "Rischio 1-2-3-4-5-6-7-8-9-10/10";

                        emittente.Rischio = string.Empty;
                        multiclass = false;

                        if (rc1)
                        {
                            emittente.Rischio += "1";
                            multiclass = true;
                        }
                        if (rc2)
                        {
                            if (multiclass)
                                emittente.Rischio += "-2";
                            else
                                emittente.Rischio += "2";
                            multiclass = true;
                        }

                        if (rc3)
                        {
                            if (multiclass)
                                emittente.Rischio += "-3";
                            else
                                emittente.Rischio += "3";
                            multiclass = true;
                        }
                        if (rc4)
                        {
                            if (multiclass)
                                emittente.Rischio += "-4";
                            else
                                emittente.Rischio += "4";
                            multiclass = true;
                        }
                        if (rc5)
                        {
                            if (multiclass)
                                emittente.Rischio += "-5";
                            else
                                emittente.Rischio += "5";
                            multiclass = true;
                        }
                        if (rc6)
                        {
                            if (multiclass)
                                emittente.Rischio += "-6";
                            else
                                emittente.Rischio += "6";
                            multiclass = true;
                        }
                        if (rc7)
                        {
                            if (multiclass)
                                emittente.Rischio += "-7";
                            else
                                emittente.Rischio += "7";
                            multiclass = true;
                        }
                        if (rc8)
                        {
                            if (multiclass)
                                emittente.Rischio += "-8";
                            else
                                emittente.Rischio += "8";
                            multiclass = true;
                        }
                        if (rc9)
                        {
                            if (multiclass)
                                emittente.Rischio += "-9";
                            else
                                emittente.Rischio += "9";
                            multiclass = true;
                        }
                        if (rc10)
                        {
                            if (multiclass)
                                emittente.Rischio += "-10";
                            else
                                emittente.Rischio += "10";
                            multiclass = true;
                        }
                        emittente.Rischio = "Rischio " + emittente.Rischio + "/10";
                    }
                }
                else
                    emittente.Rischio = "n.c.";

                //Vuol dire che ho concatenato almeno 2 stringhe e quindi ho almeno 2 classi di rischio, c'è la necessità di inserire la nota
                //if (emittente.Rischio.Length > "Oltre Classe 3".Length)
                if (iCont > 1)
                {
                    emittente.Rischio += "*";
                    emittente.Nota = true;
                }


                //emittente.Rischio = row["CreditRisk"].ToString();
                emittente.CtvObbligazionario = num.ConvertNum(row["bondsCounterValue"]);
                //.ToString();
                emittente.CtvAzionario = num.ConvertNum(row["stocksCounterValue"]);
                if (dataThread.Intermediario.ToUpper() == "COMPLESSIVO")
                    emittente.Concentrazione = num.ConvertPerformance(row["concentration_issuer"]);
                else
                    emittente.Concentrazione = num.ConvertPerformance(row["concentration"]);

                //V Aggiunto !nc altrimenti in caso di non copertura inseriva na
                if (Convert.ToDouble(row["bondsCounterValue"]) <= 0 && !nc)
                    emittente.Rischio = "n.a.";

                emittente.Rating = GetRating(row);

                #region E-DEFAULT4 
                if (intermediario.Equals("BF") )
                {
                    if (
                        //(emittente.Emittente.IndexOf("CASSA DI RISPARMIO DI FERRARA SPA", 0, StringComparison.CurrentCultureIgnoreCase) != -1) ||
                        //(emittente.Emittente.IndexOf("BANCA DELLE MARCHE", 0, StringComparison.CurrentCultureIgnoreCase) != -1) ||
                        //(emittente.Emittente.IndexOf("BANCA POPOLARE DELL'ETRURIA E DEL LAZIO - SOCIETA' COOPERATI", 0, StringComparison.CurrentCultureIgnoreCase) != -1) ||
                        //(emittente.Emittente.IndexOf("CASSA DI RISPARMIO DELLA PROVINCIA DI CHIETI", 0, StringComparison.CurrentCultureIgnoreCase) != -1)

                        emittente.Emittente.Equals("CASSA DI RISPARMIO DI FERRARA SPA") ||
                        emittente.Emittente.Equals("BANCA DELLE MARCHE") ||
                        emittente.Emittente.Equals("BANCA POPOLARE DELL'ETRURIA E DEL LAZIO - SOCIETA' COOPERATI") ||
                        emittente.Emittente.Equals("CASSA DI RISPARMIO DELLA PROVINCIA DI CHIETI")
 
                        )
                    {
                        emittente.CtvObbligazionario = "N.D.";
                    }
                }

                #endregion E-DEFAULT4

                ds168.Emittenti.AddEmittentiRow(emittente);
            }

           

            dsr.Esito = ds168.Emittenti.Rows.Count;
            dsr.DatiSezione = ds168;


            return dsr;
        }

        #endregion


        private string GetRating(DataRow dr)
        {
            string rat = "";
            string token = "";
            if (!dr["RATING_AAA"].ToString().Equals("0")) rat += token + "AAA";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_AAp"].ToString().Equals("0")) rat += token + "AA+";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_AA"].ToString().Equals("0")) rat += token + "AA";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_AAm"].ToString().Equals("0")) rat += token + "AA+";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_Ap"].ToString().Equals("0")) rat += token + "A+";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_A"].ToString().Equals("0")) rat += token + "A";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_Am"].ToString().Equals("0")) rat += token + "A-";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_BBBp"].ToString().Equals("0")) rat += token + "BBB+";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_BBB"].ToString().Equals("0")) rat += token + "BBB";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_BBBm"].ToString().Equals("0")) rat += token + "BBB-";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_BBp"].ToString().Equals("0")) rat += token + "BB+";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_BB"].ToString().Equals("0")) rat += token + "BB";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_BBm"].ToString().Equals("0")) rat += token + "BB-";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_Bp"].ToString().Equals("0")) rat += token + "B+";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_B"].ToString().Equals("0")) rat += token + "B";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_Bm"].ToString().Equals("0")) rat += token + "B-";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_CCCp"].ToString().Equals("0")) rat += token + "CCC+";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_CCC"].ToString().Equals("0")) rat += token + "CCC";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_CCCm"].ToString().Equals("0")) rat += token + "CCC-";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_CC"].ToString().Equals("0")) rat += token + "CC";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_C"].ToString().Equals("0")) rat += token + "C";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_D"].ToString().Equals("0")) rat += token + "D";
            token = !rat.Equals("") ? " / " : "";
            if (!dr["RATING_na"].ToString().Equals("0")) rat += token + "n.a.";
            if (rat.Equals("")) rat = "n.a.";
            return rat;
        }

    }
}