using ceTe.DynamicPDF;
using Consulenza.ReportWriter.Business.Entity;

namespace Consulenza.ReportWriter.Business.OBJ_PDF
{
    /// <summary>
    /// Rappresenta un rettangolo.
    /// Utilizza la classe primitiva ceTe.DynamicPDF.PageElements.Rectangle.
    /// </summary>
    public class RectanglePDF : ObjectPDF
    {
        #region Fields

        private ColorPDF _color = new ColorPDF(232, 236, 237);
        private LineStylePDF _borderStyle = LineStylePDF.Solid;

        /// <summary>
        /// Imposta o ottiene l'elemento base (PageElement)
        /// </summary>
        public ceTe.DynamicPDF.PageElements.Rectangle BaseElement { get; set; }

        /// <summary>
        /// Imposta o recupera la X del documento su cui disegnare il rettangolo.
        /// </summary>
        public float X { get; set; }

        /// <summary>
        /// Imposta o recupera la Y del documento su cui disegnare il rettangolo.
        /// </summary>
        public float Y { get; set; }

        /// <summary>
        /// Imposta o recupera la larghezza del rettangolo.
        /// </summary>
        public float Width { get; set; }

        /// <summary>
        /// Imposta o recupera l'altezza del rettangolo.
        /// </summary>
        public float Height { get; set; }

        /// <summary>
        /// Imposta o recupera un valore che indica l'incremento algebrico dell'incremento standard di Y.
        /// Utilizzare questa proprietà se si vuole incrementare o decrementare la Y assegnata automaticamente dal motore di renderizzazione.
        /// Di default=0;
        /// </summary>
        public float DeltaY { get; set; }

        public float DeltaX { get; set; }

        /// <summary>
        /// Imposta o recupera il colore del rettangolo.
        /// Di default = ColorPDF(232, 236, 237).
        /// </summary>
        public ColorPDF Color
        {
            get { return _color; }
            set { _color = value; }
        }

        /// <summary>
        /// Ottiene o imposta un valore che rappresenta il grado di arrotondamento degli angoli.
        /// Di default=0.
        /// </summary>
        public float CornerRadius { get; set; }

        /// <summary>
        /// Imposta o recupera l'angolazione.
        /// Di default= 0.
        /// </summary>
        public float Angle { get; set; }

        #endregion

        #region Bordo

        public ColorPDF BorderColor { get; set; }
        public LineStylePDF BorderStyle
        {
            get { return _borderStyle; }
            set { _borderStyle = value; }
        }
        public float BorderWidth { get; set; }

        #endregion

        #region Costruttori

        /// <summary>
        /// Costruisce un nuovo oggetto rettangolo.
        /// </summary>
        public RectanglePDF()
        {
            CornerRadius = 0;
            DeltaY = 0;
            ObjectType = ObjectTypePdf.RECTANGLE;
        }

        /// <summary>
        /// Costruisce un nuovo oggetto rettangolo. 
        /// </summary>
        /// <param name="x">Valore della X in cui disegnare il rettangolo</param>
        /// <param name="height">Altezza del rettangolo</param>
        /// <param name="width">Larghezza del rettangolo</param>
        /// <param name="color">Colore del rettangolo</param>
        public RectanglePDF(float x, float height, float width, ColorPDF color)
            : this(height, width, color)
        {
            ObjectType = ObjectTypePdf.RECTANGLE;
            X = x;
            Height = height;
            Width = width;
            _color = color;
        }

        /// <summary>
        /// Costruisce un nuovo oggetto rettangolo. 
        /// </summary>
        /// <param name="x">Valore della X in cui disegnare il rettangolo</param>
        /// <param name="y">Valore della Y in cui disegnare il rettangolo</param>
        /// <param name="height">Altezza del rettangolo</param>
        /// <param name="width">Larghezza del rettangolo</param>
        /// <param name="color">Colore del rettangolo</param>
        public RectanglePDF(float x, float y, float height, float width, ColorPDF color)
            : this(x, height, width, color)
        {
            Y = y;
        }

        /// <summary>
        /// Costruisce un nuovo oggetto rettangolo.
        /// Utilizzare questo costruttore senza X ed Y solo per aggiungere un oggetto RectanglePDF come ValueObject di una TablePDF in una colonna di tipo TipoColonna.OBJECTPDF
        /// </summary>
        /// <param name="height">Altezza del rettangolo</param>
        /// <param name="width">Larghezza del rettangolo</param>
        /// <param name="color">Colore del rettangolo</param>
        public RectanglePDF(float height, float width, ColorPDF color)
            : this()
        {
            Height = height;
            Width = width;
            _color = color;
        }
        #endregion

        #region Metodi

        /// <summary>
        /// Ritorna l'oggetto che sarà stampato sulla pagina del documento.
        /// </summary>
        /// <returns></returns>
        public override PageElement ToElement()
        {
            return BaseElement;
        }

        #endregion
    }

    public class LineStylePDF
    {
        public static LineStylePDF Solid { get; set; }
    }
}
