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

namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.Diagnosi.Nucleo
{
    public class S1 : Entity.Section 
    {
        public S1(EnvironmentFacade environmentFacade, int idSection)
            : base(environmentFacade, idSection)
        {
            try
            {
                Draw();
            }
            catch (Exception ex)
            {
                SectionLogger.Write("S1", ex.Message, SectionLoggerMessageLevel.E, EnvironmentFacade.ReportEnvironment);
            }
        }

        /// <summary>
        /// Scheda1. (Copertina (Nome del nucleo, CF dei clientiPB del nucleo solo se sono un max di 4, altrimenti non compaiono in copertina
        ///  data di produzione del report e nome e cognome del Private Banker))
        /// </summary>
        protected override sealed void Draw() //linda
        {
            var dati = GetDataSet();
             
            float _yPrivate = 366; // y di Private banker aumenta o diminuisce a seconda della presenza o meno di cf clienti nucleo
           
            var x = EnvironmentFacade.RendererFacade.XLeftLimit + 5;
            var nomeNucleo = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.NomeNucleo);
            var nomePrivateBanker = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.PrivateBanker.Nominativo);
            //List<FormattedTextAreaPDF> listaClientiNucleo = new List<FormattedTextAreaPDF>();

            //int _y = 366;
            ////if (EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.ListaClientiNucleo.Count <= 4)
            ////{

            //    //string tipopersona = "";
            //    int _k = 0;
            //    foreach (Cliente c in EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.ListaClientiNucleo)
            //    {
            //        _k = _k + 1;
            //        //tipopersona = c.Tipo == ClienteType.Fisico ? "Codice fiscale" : c.CodiceFiscale!=string.Empty ? "Codice fiscale" : "Partita IVA";
            //        listaClientiNucleo.Add(new FormattedTextAreaPDF(string.Format("{0} {1} - {2}", c.Nome, c.Cognome,c.Tipo== ClienteType.Fisico ?  c.CodiceFiscale : c.CodiceFiscale != string.Empty ? c.CodiceFiscale : c.PartitaIva), x, 740, TextAlign.Right) { FontSize = 10, Y = _y, AutoIncrementYWritable = false });
            //        if (_k < 6)
            //            _y += 12;

            //    }
            //    _yPrivate = _y + 12;
            ////}


            // data di stampa            
            var dataStampa = new FormattedTextAreaPDF(string.Format("{0} {1}", "Report prodotto il", Helper.FormatDateMonthName(DateTime.Now)), x, 500) { FontSize = 7, Y = 525, AutoIncrementYWritable = false, AbsolutePosition = true };
            var dataAggiornamentoCatastale = new FormattedTextAreaPDF(string.Format("({0} {1})", "dati catastali aggiornati al", Helper.FormatDateMonthName(Convert.ToDateTime(dati.Tables[0].Rows[0]["datarichiesta"]))), x, 500) { FontSize = 6, Y = 534, AutoIncrementYWritable = false, AbsolutePosition = true };

            // info del cliente
            var areaNucleoNominativo = new FormattedTextAreaPDF(string.Format("{0} {1}", "<B>Nucleo:</B>", nomeNucleo), x, 740, TextAlign.Right) { FontSize = 10, Y = 350, AutoIncrementYWritable = false };
            
            // info del private banker            
            var areaPrivateBankerNominativo = new FormattedTextAreaPDF(string.Format("{0} {1}", "<B>Private Banker:</B>", nomePrivateBanker), x, 740, TextAlign.Right) { FontSize = 10, Y = _yPrivate, AutoIncrementYWritable = false };


            // Aggiungo gli oggetti
            AddElement(areaNucleoNominativo);
            //if (listaClientiNucleo.Count <= 4)
            //{
            //    foreach (FormattedTextAreaPDF areaCFClientiNucleo in listaClientiNucleo)
            //        AddElement(areaCFClientiNucleo);
            //}
            //else
            //{
            //    _k = 0;
            //    foreach (FormattedTextAreaPDF areaCFClientiNucleo in listaClientiNucleo)
            //    {
            //        _k = _k + 1;
            //        if (_k <= 4)
            //            AddElement(areaCFClientiNucleo);                        
            //        else
            //        {                        
            //            var areaAltri = new FormattedTextAreaPDF("Altri", x, 740, TextAlign.Right);
            //            areaAltri.FontSize = 10;
            //            areaAltri.Y = _y;
            //            areaAltri.AutoIncrementYWritable = false;
            //            AddElement(areaAltri);
            //            break;
            //        }
            //    }
            //}

            AddElement(areaPrivateBankerNominativo);
            AddElement(dataStampa);
            AddElement(dataAggiornamentoCatastale);


            //var x = EnvironmentFacade.RendererFacade.XLeftLimit + 5;
            //var nomeNucleo = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.NomeNucleo);
            //var nomePrivateBanker = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.PrivateBanker.Nominativo);

            //// data di stampa            
            //var dataStampa = new FormattedTextAreaPDF(string.Format("{0} {1}", "Report prodotto il ", Helper.FormatDateMonthName(DateTime.Now)), x, 500) { FontSize = 6, Y = 480, AutoIncrementYWritable = false, AbsolutePosition = true };
            //string data = "";
            //if (dati.Tables[1].Rows.Count > 0)
            //    data = string.Format("({0} {1} - {2} {3})", "dati catastali aggiornati al",
            //        Helper.FormatDateMonthName(Convert.ToDateTime(dati.Tables[1].Rows[0]["dataRichiesta"])),
            //        "dati finanziari aggiornati al",
            //        Helper.FormatDateMonthName(Convert.ToDateTime(dati.Tables[1].Rows[0]["dataPF"]))
            //        );
            //else
            //    data = string.Format("({0} {1} - {2} {3})", "dati catastali aggiornati al",
            //        "--",
            //        "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}", "<B>Nucleo:</B> ", nomeNucleo);
            //var areaCliente = new FormattedTextAreaPDF(infoCliente, x, 740, TextAlign.Right) { FontSize = 10, Y = 350, AutoIncrementYWritable = false };
            //List<FormattedTextAreaPDF> listaClientiNucleo = new List<FormattedTextAreaPDF>();
            //var _yPrivate = 350;
            //if (dati.Tables[0].Rows.Count <= 4)
            //{
            //    int _y = 366;
            //    foreach (DataRow row in dati.Tables[0].Rows)
            //    {
            //        listaClientiNucleo.Add(new FormattedTextAreaPDF(string.Format("{0}{1}- {2}", ToCamelCase(row["nome"].ToString()), ToCamelCase(row["cognome"].ToString()), row["codFis"]), x, 740, TextAlign.Right) { FontSize = 10, Y = _y, AutoIncrementYWritable = false });
            //        _y += 12;
            //    }
            //    _yPrivate = _y + 12;
            //}
            //else
            //{
            //    int _y = 366;
            //    int _k = 0;
            //    foreach (DataRow row in dati.Tables[0].Rows)
            //    {
            //        _k += 1;
            //        if (_k <= 4)
            //            listaClientiNucleo.Add(new FormattedTextAreaPDF(string.Format("{0}{1}- {2}", ToCamelCase(row["nome"].ToString()), ToCamelCase(row["cognome"].ToString()), row["codFis"]), x, 740, TextAlign.Right) { FontSize = 10, Y = _y, AutoIncrementYWritable = false });
            //        else
            //        {
            //            listaClientiNucleo.Add(new FormattedTextAreaPDF(string.Format("{0}", "Altri"), x, 740, TextAlign.Right) { FontSize = 10, Y = _y, AutoIncrementYWritable = false });
            //            break;
            //        }
            //        _y += 12;
            //    }
            //    _yPrivate = _y + 12;
            //}

            //foreach (FormattedTextAreaPDF areaCFClientiNucleo in listaClientiNucleo)
            //    AddElement(areaCFClientiNucleo);

            //// info del private banker            
            //var areaPrivateBankerNominativo = new FormattedTextAreaPDF(string.Format("{0} {1}", "<B>Private Banker:</B>", nomePrivateBanker), x, 740, TextAlign.Right) { FontSize = 10, Y = _yPrivate, AutoIncrementYWritable = false };


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

        protected string ToCamelCase(string toConvert)
        {
            toConvert = toConvert.ToLower();
            var split = toConvert.Split(' ');
            StringBuilder sb = new StringBuilder();
            foreach (string _string in split)
            {
                if (_string.Length > 0)
                {
                    string firstLetter = _string.Substring(0, 1);
                    string rest = _string.Substring(1, (_string.Length - 1));
                    sb.Append(firstLetter.ToUpper() + rest);
                    sb.Append(" ");
                }
            }
            return sb.ToString();
        }

        /// <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 = "ChiaveNucleo",
                    Value = EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.ChiaveNucleo
                }
            };

            #endregion

            return EnvironmentFacade.ReportEnvironment.NucleoImmobiliare.ImmobiliareCEUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_Nucleo_Immobiliare_S1_Copertina", parametri)
                : DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_Nucleo_Immobiliare_S1_Copertina", parametri);

        }
    }
}
