using Consulenza.ReportWriter.Business.Entity;
using Consulenza.ReportWriter.Business;
using Consulenza.ReportWriter.Manager.Integration;
using System.Data;
using System.Collections.Generic;

namespace Consulenza.ReportWriter.Manager.Chapter.Entity
{
    public abstract class Chapter : EntityBase
    {
        /// <summary>
        /// Imposta o recupera l'id del capitolo definito a livello database.
        /// Campo ID della tabella Capitoli
        /// </summary>
        protected int IdChapter { get; set; }

        /// <summary>
        /// Imposta o recupera un booleano che indica se il testo del capitolo sarà ripetuto su tutte le pagine sottostanti al capitolo stesso. 
        /// </summary>
        public bool RepeatOnEachPage { get; set; }

        /// <summary>
        /// Imposta o recupera un bool che determina l'esisteza del Chapter e relativa Section.
        /// Se false non viene stampato ne il Chapter ne la Section.
        /// Di default = true.
        /// </summary>
        public bool Exist { get; set; }

        /// <summary>
        /// Imposta o recupera l'oggetto IntegrationLayout che contiene informazioni id integrazioni grafiche.
        /// Ad esempio: duplicazione di capitoli, paragrafi e sezioni...
        /// </summary>
        protected IntegrationLayout IntegrationLayout { get; set; }

        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="environmentFacade"></param>
        /// <param name="idchapter"></param>
        protected Chapter(EnvironmentFacade environmentFacade, int idchapter)
            : base(environmentFacade)
        {
            IdChapter = idchapter;
            EntityType = EntityTypePdf.Chapter;
            Exist = true;
        }

        /// <summary>
        /// Disegna il capitolo.
        /// </summary>
        protected abstract void Draw();

        /// <summary>
        /// Recupera i testi definiti in tabella [ReportModeler2].[TestiCapitoli] eseguendo la stored sp_RecuperaTestiCapitoli.
        /// </summary>
        /// <returns></returns>
        protected DataTable GetText()
        {
            #region Definizione dei parametri

            var parametri = new List<Parametro>
            {
                new Parametro
                {
                    Direction = ParameterDirection.Input,
                    DbType = DbType.Int32,
                    ParameterName = "IdReport",
                    Value = EnvironmentFacade.ReportEnvironment.ReportId
                },
                new Parametro
                {
                    Direction = ParameterDirection.Input,
                    DbType = DbType.Int32,
                    ParameterName = "IdCapitolo",
                    Value = IdChapter
                }
            };

            #endregion

            return DataAccess.ExecuteDataTableStoredProcedure(DBProvider.SqlServerReportModeler, "sp_RecuperaTestiCapitoli", parametri);
        }
        
        public override string ToString()
        {
            return IdChapter.ToString();
        }
    }
}
