using Consulenza.ReportCommon;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System;
using System.Data;
using System.Linq;

namespace Consulenza.ReportWriter.Manager.Section.Unica.Proposta
{
    /// <summary>
    /// Scheda 2. Sintesi Cliente. IdSezione 45
    /// </summary>
    public class S2 : Unica.S2
    {
        public S2(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {

        }

        //protected override DataSet GetDataSet()
        //{
        //    #region Definizione Tabelle
        //    var ds = new DataSet();
        //    ds.Tables.Add(new DataTable("cliente"));
        //    ds.Tables.Add(new DataTable("rischio"));
        //    ds.Tables.Add(new DataTable("patrimonio"));
        //    ds.Tables.Add(new DataTable("elencoPatrimonio"));
        //    #endregion

        //    #region Estrazione Chiave PB + Servizi


        //    var dataPatrimonioComplessivo = datiSeiUnico.patrimonioUnit().patrimonioComplessivo;

        //    var rischioPatrimonioCasa = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.varInfos;
        //    var questionarioCliente = datiSeiUnico.piramideModelloUnit().questionarioMifid;
        //    var displayInfo = datiSeiUnico.displayInfos().tipoPatrimonioDisplayInfos;
        //    var delegato = datiSeiUnico.propostaUnit().stDettaglioProposta.delgato;
        //    var cliente = datiSeiUnico.clienteUnit().anagrafica;

        //    #endregion



        //    #region Dati del Cliente

        //    ds.Tables["cliente"].Columns.Add(new DataColumn("Descrizione", typeof(string)));
        //    ds.Tables["cliente"].Columns.Add(new DataColumn("Valore", typeof(string)));
        //    string contrattoDiConsulenza = "";
        //    if ("Nessun Contratto".Equals(cliente.contrattoReport))
        //        contrattoDiConsulenza = cliente.contrattoReport;
        //    else
        //        contrattoDiConsulenza = cliente.contrattoReport + " del " + cliente.dtSottoscrizione.ToString("dd/MM/yyyy");
        //    if (!GetOption<Opzione1>().ReportAnonimo)
        //    {
        //        ds.Tables["cliente"].Rows.Add("Cliente", string.Format("{0} {1}", cliente.cognome, cliente.nome));
        //        ds.Tables["cliente"].Rows.Add("Codice fiscale/Part. IVA", cliente.partitaIva != null ? cliente.partitaIva : cliente.codiceFiscale);
        //    }

        //    ds.Tables["cliente"].Rows.Add("Contratto di consulenza", contrattoDiConsulenza);
        //    ds.Tables["cliente"].Rows.Add("Profilo finanziario", string.Format("{0}", cliente.descProfilo));

        //    if(delegato != null)
        //        ds.Tables["cliente"].Rows.Add("Legale Rappresentante /<BR>Delegato", string.Format("{0} {1}", delegato.cognomeDelegato, delegato.nomeDelegato));

        //    #endregion

        //    #region Rischio del cliente e del Patrimonio Casa

        //    ds.Tables["rischio"].Columns.Add(new DataColumn("Rischio", typeof(string)));
        //    ds.Tables["rischio"].Columns.Add(new DataColumn("ProfiloFinanziario", typeof(string)));

        //    ds.Tables["rischio"].Columns.Add(new DataColumn("PatrimonioCasa", typeof(string)));
        //    ds.Tables["rischio"].Rows.Add("Rischio Mercato (VaR %)",
        //        questionarioCliente != null ? Helper.FormatDecimal(questionarioCliente.profileVarMax.ToString(), 2) : "n.a.",
        //        rischioPatrimonioCasa.varDecodificato);
        //    ds.Tables["rischio"].Rows.Add("Rischio Credito",
        //        questionarioCliente != null ? Helper.CapitalizeWords(questionarioCliente.profileClassRiskMax) : "n.a.",
        //        (rischioPatrimonioCasa.rischioCreditoDecodificato.ToUpper().Contains("CLASSE")) ? Helper.CapitalizeWords(rischioPatrimonioCasa.rischioCreditoDecodificato) : rischioPatrimonioCasa.rischioCreditoDecodificato);

        //    #endregion

        //    #region Patrimonio complessivo

        //    ds.Tables["patrimonio"].Columns.Add(new DataColumn("Descrizione", typeof(string)));
        //    ds.Tables["patrimonio"].Columns.Add(new DataColumn("Valore", typeof(string)));

        //    var testoPatrimonio = string.Format("Patrimonio complessivo (€){0}", GetNote1().Length > 0 ? "*" : string.Empty);
        //    ds.Tables["patrimonio"].Rows.Add(testoPatrimonio, Helper.FormatCurrency(datiSeiUnico.CMP_TOTALEPOSITIVO.ToString()));

        //    #endregion

        //    #region Elenco patrimoni per grafico a barre

        //    ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Patrimonio", typeof(string)));
        //    ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Red", typeof(int)));
        //    ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Green", typeof(int)));
        //    ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Blue", typeof(int)));
        //    ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Controvalore", typeof(decimal)));
        //    ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Percentuale", typeof(decimal)));
        //    ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Ordinamento", typeof(int)));
        //    if (dataPatrimonioComplessivo.elencoSlice != null)
        //    {
        //        foreach (var item in dataPatrimonioComplessivo.elencoSlice)
        //        {
        //            var mapDisplayInfo = displayInfo.Where(l => l.key == item.codice).ToArray();
        //            string titolo = "";
        //            if (item.descrizione.Contains("SanPaolo") || item.descrizione.Contains("Fideuram") || item.descrizione.Contains("Altri"))
        //            {
        //                bool CASA_NEG = (datiSeiUnico.CASA_CCN + datiSeiUnico.CASA_GPELIGO) != 0;
        //                if (item.descrizione.Contains("SanPaolo") || item.descrizione.Contains("Fideuram"))
        //                    titolo = string.Format(item.descrizione + "{0}", CASA_NEG ? "*" : "");
        //                else
        //                    if (item.descrizione.Contains("Altri"))
        //                        titolo = string.Format(item.descrizione + "{0}", (datiSeiUnico.TRZ_CCN != 0) ? "*" : "");
        //            }
        //            else
        //                titolo = item.descrizione;
        //            var colore = new ColorPDF(mapDisplayInfo[0].value.fill);
        //            var ordinamento = mapDisplayInfo[0].value.order;

        //            ds.Tables["elencoPatrimonio"].Rows.Add(titolo, colore.Red, colore.Green, colore.Blue, item.ctv, item.peso * 100, ordinamento);
        //        }

        //        ds.Tables["elencoPatrimonio"].AsEnumerable().OrderBy(r => r.Field<int>("Ordinamento"));
        //    }
        //    #endregion

        //    return ds;
        //}

        protected override DataSet GetDataSet()
        {
            #region Definizione Tabelle
            var ds = new DataSet();
            ds.Tables.Add(new DataTable("cliente"));
            ds.Tables.Add(new DataTable("rischio"));
            ds.Tables.Add(new DataTable("patrimonio"));
            ds.Tables.Add(new DataTable("elencoPatrimonio"));
            #endregion

            #region Estrazione Chiave PB + Servizi


            var dataPatrimonioComplessivo = datiSeiUnico.patrimonioUnit().patrimonioComplessivo;
            /********************* Estrazione chiave PB per modifica 31/08/2021 - Andrea *********************************/
            var chiavePB = datiSeiUnico.all().promotoreBancario.chiavePb;
            /********************************************************************************************************************/
            var rischioPatrimonioCasa = datiSeiUnico.pianificazioneUnit().pianificazioneVerticale.varInfos;
            var questionarioCliente = datiSeiUnico.piramideModelloUnit().questionarioMifid;
            var displayInfo = datiSeiUnico.displayInfos().tipoPatrimonioDisplayInfos;
            var delegato = datiSeiUnico.propostaUnit().stDettaglioProposta.delgato;
            var cliente = datiSeiUnico.clienteUnit().anagrafica;

            #endregion



            #region Dati del Cliente

            ds.Tables["cliente"].Columns.Add(new DataColumn("Descrizione", typeof(string)));
            ds.Tables["cliente"].Columns.Add(new DataColumn("Valore", typeof(string)));

            if (!GetOption<Opzione1>().ReportAnonimo)
            {
                ds.Tables["cliente"].Rows.Add("Cliente", string.Format("{0} {1}", cliente.cognome, cliente.nome));
                ds.Tables["cliente"].Rows.Add("Codice fiscale/Part. IVA", cliente.partitaIva != null ? cliente.partitaIva : cliente.codiceFiscale);
            }

            DataTable dtSospeso = null;
            String sospeso = "";

            // ************************************ Fix per clienti sempre sospesi 31/08/2021 - Andrea *****************************************************************//
            // String query = "Select chiaveCliente from vRfaMinusPerPB where codFis = '" + (cliente.partitaIva != null ? cliente.partitaIva : cliente.codiceFiscale) + "'";
            String query = "Select chiaveCliente from vRfaMinusPerPB where chiavePB = '" + (chiavePB.ToString()) + "' and codFis = '" + (cliente.partitaIva != null ? cliente.partitaIva : cliente.codiceFiscale) + "'";
            // *******************************************************************************************************************************************************//

            dtSospeso = DataAccess.ExecuteDataTableSqlStatement(DBProvider.SqlServerConsulenzaUnica, query, null);
            if (dtSospeso.Rows.Count > 0 && !DBNull.Value.Equals(dtSospeso.Rows[0][0]))
            {//è sospeso si comporta come base+ 
                if (!cliente.contrattoReport.Contains("sospeso"))//controllo se già contiene l'indicazione
                {
                    sospeso = " sospeso";
                }
            }

            if (cliente.descProfiloEC == null)
            {
                string contrattoDiConsulenza = "";
                if ("Nessun Contratto".Equals(cliente.contrattoReport))
                    contrattoDiConsulenza = cliente.contrattoReport;
                else
                {
                    contrattoDiConsulenza = cliente.contrattoReport + sospeso + " del " + cliente.dtSottoscrizione.ToString("dd/MM/yyyy");
                }
                ds.Tables["cliente"].Rows.Add("Contratto di consulenza", contrattoDiConsulenza);
                ds.Tables["cliente"].Rows.Add("Profilo finanziario", string.Format("{0}", cliente.descProfilo));

                if (delegato != null)
                    ds.Tables["cliente"].Rows.Add("Legale Rappresentante /<BR>Delegato", string.Format("{0} {1}", delegato.cognomeDelegato, delegato.nomeDelegato));
            }
            else
            {

                ds.Tables.Add(new DataTable("dtClienteDueColonne"));
                var dtClienteDueColonne = ds.Tables["dtClienteDueColonne"];
                dtClienteDueColonne.Columns.Add(new DataColumn("controvalore"));
                dtClienteDueColonne.Columns.Add(new DataColumn("valore"));
                dtClienteDueColonne.Columns.Add(new DataColumn("descrizione"));
                dtClienteDueColonne.Columns.Add(new DataColumn("val"));

                DataRow row = dtClienteDueColonne.NewRow();
                dtClienteDueColonne.Rows.Add(row);
                dtClienteDueColonne.Rows[0]["controvalore"] = "Contratto di consulenza";
                dtClienteDueColonne.Rows[0]["valore"] = cliente.contrattoReport + sospeso;
                dtClienteDueColonne.Rows[0]["descrizione"] = "Data sottoscrizione";
                dtClienteDueColonne.Rows[0]["val"] = cliente.dtSottoscrizione.ToString("dd/MM/yyyy");
                DataRow row2 = dtClienteDueColonne.NewRow();
                dtClienteDueColonne.Rows.Add(row2);
                dtClienteDueColonne.Rows[1]["controvalore"] = "Profilo finanziario";
                dtClienteDueColonne.Rows[1]["valore"] = cliente.descProfilo;
                dtClienteDueColonne.Rows[1]["descrizione"] = "Profilo esperienza e conoscenza";
                dtClienteDueColonne.Rows[1]["val"] = cliente.descProfiloEC;
            }

            #endregion

            #region Rischio del cliente e del Patrimonio Casa

            ds.Tables["rischio"].Columns.Add(new DataColumn("Rischio", typeof(string)));
            ds.Tables["rischio"].Columns.Add(new DataColumn("ProfiloFinanziario", typeof(string)));

            ds.Tables["rischio"].Columns.Add(new DataColumn("PatrimonioCasa", typeof(string)));
            ds.Tables["rischio"].Rows.Add("Rischio Mercato (VaR %)",
                questionarioCliente != null ? Helper.FormatDecimal(questionarioCliente.profileVarMax.ToString(), 2) : "n.a.",
                rischioPatrimonioCasa.varDecodificato);
            ds.Tables["rischio"].Rows.Add("Rischio Credito",
                questionarioCliente != null ? Helper.CapitalizeWords(questionarioCliente.profileClassRiskMax) : "n.a.",
                (rischioPatrimonioCasa.rischioCreditoDecodificato.ToUpper().Contains("CLASSE")) ? Helper.CapitalizeWords(rischioPatrimonioCasa.rischioCreditoDecodificato) : rischioPatrimonioCasa.rischioCreditoDecodificato);

            #endregion

            #region Patrimonio complessivo

            ds.Tables["patrimonio"].Columns.Add(new DataColumn("Descrizione", typeof(string)));
            ds.Tables["patrimonio"].Columns.Add(new DataColumn("Valore", typeof(string)));

            var testoPatrimonio = string.Format("Patrimonio complessivo (€){0}", GetNote1().Length > 0 ? "*" : string.Empty);
            ds.Tables["patrimonio"].Rows.Add(testoPatrimonio, Helper.FormatCurrency(datiSeiUnico.CMP_TOTALEPOSITIVO.ToString()));

            #endregion

            #region Elenco patrimoni per grafico a barre

            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Patrimonio", typeof(string)));
            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Red", typeof(int)));
            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Green", typeof(int)));
            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Blue", typeof(int)));
            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Controvalore", typeof(decimal)));
            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("ProQuota", typeof(decimal)));
            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Percentuale", typeof(decimal)));
            ds.Tables["elencoPatrimonio"].Columns.Add(new DataColumn("Ordinamento", typeof(int)));

            if (dataPatrimonioComplessivo.elencoSlice != null)
            {
                foreach (var item in dataPatrimonioComplessivo.elencoSlice)
                {
                    var mapDisplayInfo = displayInfo.Where(l => l.key == item.codice).ToArray();
                    string titolo = "";
                    if (item.descrizione.Contains("SanPaolo") || item.descrizione.Contains("Fideuram") || item.descrizione.Contains("Altri"))
                    {
                        bool CASA_NEG = (datiSeiUnico.CASA_CCN + datiSeiUnico.CASA_GPELIGO) != 0;
                        if (item.descrizione.Contains("SanPaolo") || item.descrizione.Contains("Fideuram"))
                            titolo = string.Format(item.descrizione + "{0}", CASA_NEG ? "*" : "");
                        else
                            if (item.descrizione.Contains("Altri"))
                            titolo = string.Format(item.descrizione + "{0}", (datiSeiUnico.TRZ_CCN != 0) ? "*" : "");
                    }
                    else
                        titolo = item.descrizione;
                    var colore = new ColorPDF(mapDisplayInfo[0].value.fill);
                    var ordinamento = mapDisplayInfo[0].value.order;

                    //ds.Tables["elencoPatrimonio"].Rows.Add(titolo, colore.Red, colore.Green, colore.Blue, item.ctv, item.peso * 100, ordinamento);
                    // Provvisorio 20181123
                    ds.Tables["elencoPatrimonio"].Rows.Add(titolo, colore.Red, colore.Green, colore.Blue, item.ctv, item.proQuota, item.peso * 100, ordinamento);

                }

                ds.Tables["elencoPatrimonio"].AsEnumerable().OrderBy(r => r.Field<int>("Ordinamento"));
            }
            #endregion

            return ds;
        }

        //public virtual string getTesto1()
        //{
        //    string testo = "Sono riportati di seguito le principali informazioni anagrafiche e ";
        //    testo += "il profilo finanziario del cliente: il livello di rischio del patrimonio $/Banca/$ in termini di ";
        //    testo += "Rischio Mercato (VaR) e Rischio Credito è confrontato con i livelli massimi associati al suo profilo finanziario.";
        //    return testo.Replace("$/Banca/$", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment));
        //}

        //public virtual string getTesto2()
        //{
        //    string testo = "Il grafico rappresenta la ripartizione del suo patrimonio in finanziario ($/Banca/$ e altri Istituti), immobiliare, aziendale e altro.";
        //    return testo.Replace("$/Banca/$", Helper.ReplaceVariables("$/Banca/$", EnvironmentFacade.ReportEnvironment));

        //}

        //public virtual string GetNote1()
        //{

        //    string nota = "";
        //    string token = "";


        //    decimal CCN_CASA = datiSeiUnico.CASA_CCN;
        //    decimal GPELIGOFONDI_CASA = datiSeiUnico.CASA_GPELIGOFONDI;
        //    decimal GPELIGTITOLI_CASA = datiSeiUnico.CASA_GPELIGTITOLI;
        //    decimal CCN_TERZI = datiSeiUnico.TRZ_CCN;


        //    if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0 || CCN_TERZI != 0)
        //    {
        //        nota += token + "Il controvalore esclude il saldo negativo";
        //        token = " ";
        //        if (CCN_CASA != 0)
        //        {
        //            nota += token + datiSeiUnico.FormatDecimal("dei conti correnti ({0} €)", CCN_CASA);
        //            token = ", ";
        //        }
        //        if (GPELIGOFONDI_CASA != 0)
        //        {
        //            nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Fondi ({0} €)", GPELIGOFONDI_CASA);
        //            token = ", ";
        //        }
        //        if (GPELIGTITOLI_CASA != 0)
        //        {
        //            nota += token + datiSeiUnico.FormatDecimal("della liquidità sottostante la GP Eligo Titoli ({0} €)", GPELIGTITOLI_CASA);
        //            token = ", ";
        //        }
        //        token = " ";
        //        if (CCN_CASA != 0 || GPELIGOFONDI_CASA != 0 || GPELIGTITOLI_CASA != 0)
        //        {
        //            nota += token + "del patrimonio $/Banca/$";
        //            token = ", ";
        //        }
        //        if (CCN_TERZI != 0)
        //        {
        //            nota += token + datiSeiUnico.FormatDecimal("dei conti correnti ({0} €) del patrimonio altri Istituti", CCN_TERZI);
        //            token = ", ";
        //        }
        //        nota += ".";
        //        token = " ";
        //    }

        //    nota = !nota.Equals("") ? "(*) " + nota : nota;
        //    return datiSeiUnico.FormatBanca(nota);

        //}


    }
}
