using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ceTe.DynamicPDF;

namespace PDFGenerator.Entity
{
    /// <summary>
    /// Enumeratore dei tipi di oggetto(ObjectPDF) disponibili.
    /// </summary>
    public enum ObjectTypePdf
    {
        FORMATTEDTEXTAREA,
        IMAGE,
        //LABEL,
        TABLENOTE,
        SPACE,
        TABLE,
        PAGE,
        LINE,
        RECTANGLE,
        CIRCLE,
        CIRCLEREAL,
        UNORDEREDLIST,
        RESETTER_Y,
        CHART,
        REPEATER,
        COMPOSITE,
        CUSTOMCHART,
        ACTIONPDF
    }

    /// <summary>
    /// Enumeratore dei tipi di oggetto(Chart) disponibili.
    /// </summary>
    public enum ChartTypePdf
    {
        PIE,
        STACKED,
        COMBINATION
    }

    /// <summary>
    /// Enumeratore dei tipi di entità(EntityBase) disponibili.
    /// </summary>
    public enum EntityTypePdf
    {
        Chapter,
        Paragraph,
        Section
    }

    /// <summary>
    /// Enumeratore generico dei formati.
    /// </summary>
    public enum FormatType
    {
        Intero,
        Decimale0,
        Decimale1,
        Decimale2,
        Decimale2ConSeparatore,
        Valuta,
        Percentuale,
        Data,
        DataShort,
        DataSenzaOra,
        MeseAnno,
        PercentualeImmobiliare,
        //InteroConSepartore
    }

    /// <summary>
    /// Definisce la classe astratta che racchiude le caratteristiche comuni ad ogni ObjectPDF.
    /// Ogni ObjectPDF, i cui tipi sono definiti dalla proprietà _objecttype, avrà _autoincrementywritable di default=true 
    /// in modo da rendere possibile al motore di renderizzazione di autoicrementare la y del documento alla scrittura di qualsiasi ObjectPDF.
    /// </summary>
    public abstract class ObjectPDF : PageElement
    {
        private bool _autoincrementywritable = true;

        /// <summary>
        /// Imposta o recupera il tipo di oggetto.
        /// </summary>
        public ObjectTypePdf ObjectType { get; set; }

        /// <summary>
        /// Imposta o recupera un booleano che se true incrementa la YWritable dopo che l'oggetto è stato disegnato sulla pagina.
        /// Di default=true.
        /// </summary>
        public bool AutoIncrementYWritable
        {
            get { return _autoincrementywritable; }
            set { _autoincrementywritable = value; }
        }

        /// <summary>
        /// Override del metodo
        /// </summary>
        /// <param name="wr"></param>
        public override void Draw(ceTe.DynamicPDF.IO.PageWriter wr)
        {
        }

        /// <summary>
        /// Oggetto che sarà stampato
        /// </summary>
        /// <returns></returns>
        public abstract PageElement ToElement();

    }
}