using System;
using ceTe.DynamicPDF;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportCommon;
using Consulenza.ReportWriter.Business.OBJ_PDF;
using System.Configuration;
using System.Data;
using System.Collections.Generic;

namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.Monitoraggio
{
    public class S1 : Entity.Section
    {
        public bool bFlag = false;

        public S1(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                if (idSection == 999)
                    bFlag = true;
                else
                    bFlag = false;

                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S1", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        /// <summary>
        /// Scheda1. (Copertina (Titolo, data di produzione del report e codice fiscale del cliente))
        /// </summary>
        protected override sealed void Draw()
        {
           var dati = GetDataSet();

            var x = EnvironmentFacade.RendererFacade.XLeftLimit;
            var nomeCliente = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.Cliente.Nome);
            var cognomeCliente = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.Cliente.Cognome);
            var nomePrivateBanker = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.PrivateBanker.Nominativo);

            string sTestoData = "";
            string data = "";

            //if (bFlag)
            //{
            //    // data di stampa           
            //    sTestoData = string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_LetteraAccompagnamento"])));
            //    data = "";
            //    //sTestoData = string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
            //    //dataStampa = string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(DateTime.Now)), x, 500) { FontSize = 6, Y = 480, AutoIncrementYWritable = false, AbsolutePosition = true };
            //    data = string.Format("({0} {1} - {2} {3})", "dati catastali aggiornati al",
            //    Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])),
            //    "dati finanziari aggiornati al",
            //    Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
            //}
            //else
            //{
            //    // data di stampa           
            //    sTestoData = string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(DateTime.Now));
            //    data = "";
            //    //sTestoData = string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(DateTime.Now));
            //    data = string.Format("({0} {1} - {2} {3})", "dati catastali aggiornati al",
            //    Helper.FormatDateMonthName(Convert.ToDateTime(dati.Tables[0].Rows[0]["datarichiesta"])),
            //    "dati finanziari aggiornati al",
            //    Helper.FormatDateMonthName(Convert.ToDateTime(GetDataFinanziario().Tables[0].Rows[0]["dataPF"])));
            //}

            // Commentata per non Rilascio 20181211
            if (bFlag)
            {
                sTestoData = string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_LetteraAccompagnamento"])));

                /*********************** Fix 21-04-2020 Per rfa a null - Pino *****************************************************************/
                DataSet dsRFA = GetDataFinanziario();

                /* Modfica per la verifica delle quote variate effettuata con un congelato diverso -- Pino*/
                if (dsRFA.Tables[0].Rows.Count > 0)
                {
                    if (dsRFA.Tables[0].Rows[0]["rfa"].ToString() != string.Empty)
                    {
                        if (Convert.ToDouble(dsRFA.Tables[0].Rows[0]["rfa"]) > 0)
                        {
                            data = string.Format("({0} {1} - {2} {3})", "dati catastali aggiornati al",
                            Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])),
                            "dati finanziari aggiornati al",
                            Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
                        }
                        else
                        {
                            data = string.Format("({0} {1})", "dati catastali aggiornati al",
                            Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
                        }
                    }
                    else
                    {
                        data = string.Format("({0} {1})", "dati catastali aggiornati al",
                        Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
                    }
                }
                else
                {
                    data = string.Format("({0} {1})", "dati catastali aggiornati al",
                    Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
                }
                /*********************** Fine modifica ****************************************************************/

                /**********************************************************************************************************************************/

                /******************** Codice Originale *******************************************************************************************/
                //if (Convert.ToDouble(GetDataFinanziario().Tables[0].Rows[0]["rfa"]) > 0)
                //    data = string.Format("({0} {1} - {2} {3})", "dati catastali aggiornati al",
                //    Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])),
                //    "dati finanziari aggiornati al",
                //    Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
                //else
                //    data = string.Format("({0} {1})", "dati catastali aggiornati al",
                //    Helper.FormatDateMonthName(Convert.ToDateTime(ConfigurationManager.AppSettings["DataFineTrimestreCorrente_Copertina"])));
                /*********************************************************************************************************************************/
            }
            else
            {
                sTestoData = string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(DateTime.Now));
                if (Convert.ToDouble(GetDataFinanziario().Tables[0].Rows[0]["rfa"]) > 0)
                    data = string.Format("({0} {1} - {2} {3})", "dati catastali aggiornati al",
                    Helper.FormatDateMonthName(Convert.ToDateTime(dati.Tables[0].Rows[0]["datarichiesta"])),
                    "dati finanziari aggiornati al",
                    Helper.FormatDateMonthName(Convert.ToDateTime(GetDataFinanziario().Tables[0].Rows[0]["dataPF"])));
                else
                    data = string.Format("({0} {1})", "dati catastali aggiornati al",
                    Helper.FormatDateMonthName(Convert.ToDateTime(dati.Tables[0].Rows[0]["datarichiesta"])));
            }

            var dataStampa = new FormattedTextAreaPDF(sTestoData, x, 500) { FontSize = 6, Y = 480, AutoIncrementYWritable = false, AbsolutePosition = true };


            //string data = string.Format("({0} {1} - {2})", "dati catastali aggiornati al",
            //    Helper.FormatDateMonthName(Convert.ToDateTime(dati.Tables[0].Rows[0]["datarichiesta"])),"dati finanziari aggiornati al ----");

            var dataAggiornamentoCatastale = new FormattedTextAreaPDF(data, x, 500) { FontSize = 6, Y = 490, AutoIncrementYWritable = false, AbsolutePosition = true };
            string labelCliente = EnvironmentFacade.ReportEnvironment.Cliente.Tipo == ClienteType.Fisico ? "Codice fiscale" : EnvironmentFacade.ReportEnvironment.Cliente.CodiceFiscale != string.Empty ? "Codice fiscale" : "Partita Iva";
            string datoCliente = EnvironmentFacade.ReportEnvironment.Cliente.Tipo == ClienteType.Fisico ? EnvironmentFacade.ReportEnvironment.Cliente.CodiceFiscale : EnvironmentFacade.ReportEnvironment.Cliente.CodiceFiscale != string.Empty ? EnvironmentFacade.ReportEnvironment.Cliente.CodiceFiscale : EnvironmentFacade.ReportEnvironment.Cliente.PartitaIva;
            // info del cliente
            string infoCliente = string.Format("{0} {1} {2}", "<B>Cliente</B>: ", nomeCliente, cognomeCliente) + " - " + string.Format("{0} {1}", "", datoCliente);
            var areaCliente = new FormattedTextAreaPDF(infoCliente, x, 740, TextAlign.Right) { FontSize = 10, Y = 350, AutoIncrementYWritable = false };

            // info del private banker
            //Se il nome del PB  non risulta presente allora non visualizzo il riferimento al PB - scenario PB terminato ma cliente ancora associato
            /***** da riga 115 a riga 116 modifiche fatte sul branch F/BatchSemestrale - la riga 117 è quella originale *****/
            string infoPB = (nomePrivateBanker.Equals("")) ? "" : string.Format("{0} {1}", "<B>Private Banker:</B>", nomePrivateBanker);
            var areaPrivateBankerNominativo = new FormattedTextAreaPDF(infoPB, x, 740, TextAlign.Right) { FontSize = 10, Y = 365, AutoIncrementYWritable = false };
            //var areaPrivateBankerNominativo = new FormattedTextAreaPDF(string.Format("{0} {1}", "<B>Private Banker:</B>", nomePrivateBanker), x, 740, TextAlign.Right) { FontSize = 10, Y = 365, AutoIncrementYWritable = false };


            // Aggiungo gli oggetti
            AddElement(areaCliente);
            AddElement(areaPrivateBankerNominativo);
            AddElement(dataStampa);
            AddElement(dataAggiornamentoCatastale);
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataTable.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataTable GetDataTable()
        {
            return null;
        }

        /// <summary>
        /// Recupera i dati necessari alla Section restituendo un DataSet.
        /// </summary>
        /// <returns></returns>
        protected sealed override DataSet GetDataSet()
        {
			#region Definizione dei parametri

			var parametri = new List<Parametro>
			{
				new Parametro
				{
					Direction = ParameterDirection.Input,
					DbType = DbType.Int64,
					ParameterName = "ChiaveClientePB",
					Value = EnvironmentFacade.ReportEnvironment.Cliente.Chiave
				}
			};

            #endregion
            return DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Immobiliare_S1_Copertina", parametri);
            //return EnvironmentFacade.ReportEnvironment.Immobiliare.ImmobiliareCEUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Immobiliare_S1_Copertina", parametri)
            //    : DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_Immobiliare_S1_Copertina", parametri);
        }

        protected DataSet GetDataFinanziario()
        {
            #region Definizione dei parametri

            var parametri = new List<Parametro>
			{
				new Parametro
				{
					Direction = ParameterDirection.Input,
					DbType = DbType.Int64,
					ParameterName = "ChiaveClientePB",
					Value = EnvironmentFacade.ReportEnvironment.Cliente.Chiave
				}
			};

            #endregion

            return DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_ImmobiliareMonitoraggio_S1_Copertina", parametri);
        }
    }
}
