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;

namespace Consulenza.ReportWriter.Manager.Section.Immobiliare.MappaturaPreliminare
{
    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 (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 + 5;
            var nomeCliente = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.Cliente.Nome);
            var cognomeCliente = Helper.CapitalizeWords(EnvironmentFacade.ReportEnvironment.Cliente.Cognome);
            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 = 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 };
            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
            //var areaClienteNominativo = new FormattedTextAreaPDF(string.Format("{0} {1} {2}", "<B>Cliente:</B>", nomeCliente, cognomeCliente), x, 740, TextAlign.Right) { FontSize = 10, Y = 350, AutoIncrementYWritable = false };
            //var areaClienteCodiceFiscale = new FormattedTextAreaPDF(string.Format("{0} {1}", "Codice fiscale", datoCliente), x, 740, TextAlign.Right) { FontSize = 10, Y = 366, AutoIncrementYWritable = false };

            var areaClienteNominativo = new FormattedTextAreaPDF(string.Format("{0} {1} {2} {3}", "<B>Cliente:</B>", nomeCliente, cognomeCliente, " - " + datoCliente), x, 750, 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, 750, TextAlign.Right) { FontSize = 10, Y = 365, AutoIncrementYWritable = false };


            // Aggiungo gli oggetti
            AddElement(areaClienteNominativo);
            //AddElement(areaClienteCodiceFiscale);
            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 EnvironmentFacade.ReportEnvironment.MappaturaPreliminare.ImmobiliareCEUnica ? DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaUnica, "REP_MappaturaPreliminare_S1_Copertina", parametri)
                : DataAccess.ExecuteDataSetStoredProcedure(DBProvider.SqlServerConsulenzaEvoluta, "REP_MappaturaPreliminare_S1_Copertina", parametri);
        }
    }
}
