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

namespace Consulenza.ReportWriter.Business.OBJ_PDF
{
    /// <summary>
    /// Rappresenta una linea.
    /// Se non specificato il colore della linea di base è ColorPDF.ConsulenzaBase_Grigio_BordoColonnaHeaderFooterTabella.
    /// Di default viene disegnata una linea orizzonatale.
    /// Impostando la _deltay2forverticalline la linea viene disegnata verticalmente.
    /// Utilizza la classe primitiva ceTe.DynamicPDF.PageElements.Line.
    /// </summary>
    public class LinePDF : ObjectPDF
    {
        #region Fields

        private float _width = 0.5F;
        private ColorPDF _color = ColorPDF.ConsulenzaBase_Grigio_BordoColonnaHeaderFooterTabella;
        private LineStyle _borderStyle = LineStyle.Solid;

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

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

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

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

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

        /// <summary>
        /// Imposta o recupera la larghezza intesa come spessore della linea.
        /// </summary>
        public float Width
        {
            get { return _width; }
            set { _width = value; }
        }

        public LineStyle BorderStyle { 
            get{    return _borderStyle;   }
            set{    _borderStyle = value;  } 
        }

        /// <summary>
        /// Imposta o recupera un valore che è l'incremento algebrigo della Y2.
        /// Questa proprietà va utilizzata per disegnare linee verticali.
        /// Di default=0;
        /// </summary>
        public float DeltaY2ForVerticalLine { get; set; }

        /// <summary>
        /// Imposta o recupera un valore che indica l'incremento algebrico dell'incremento standard di Y1 e Y2.
        /// 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; }

        /// <summary>
        /// Imposta o recupera il colore della linea.
        /// Di default = ColorPDF.ConsulenzaBase_Grigio_BordoColonnaHeaderFooterTabella.
        /// </summary>
        public ColorPDF Color
        {
            get { return _color; }
            set { _color = value; }
        }

        #endregion

        #region Costruttori

        /// <summary>
        /// Costruttore
        /// </summary>
        public LinePDF()
        {
            DeltaY = 0;
            DeltaY2ForVerticalLine = 0;
            ObjectType = ObjectTypePdf.LINE;
        }

        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="x1">X iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="x2">X finale in cui terminare il disegno della linea.</param>
        public LinePDF(float x1, float x2)
            : this()
        {
            X1 = x1;
            X2 = x2;
            Y1 = 0;
            Y2 = 0;            
        }

        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="x1">X iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="x2">X finale in cui terminare il disegno della linea.</param>
        /// <param name="width">Spessore della linea.Se non impostato=1.</param>
        public LinePDF(float x1, float x2, float width)
            : this(x1, x2)
        {
            _width = width;            
        }

        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="x1">X iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="x2">X finale in cui terminare il disegno della linea.</param>
        /// <param name="width">Spessore della linea.Se non impostato=1.</param>
        /// <param name="color">Colore della linea.Se non impostato è ColorPDF.ConsulenzaBase_Grigio_BordoColonnaHeaderFooterTabella.</param>
        public LinePDF(float x1, float x2, float width, ColorPDF color)
            : this(x1, x2, width)
        {
            _color = color;           
        }


        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="x1">X iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="y1">Y iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="x2">X finale in cui terminare il disegno della linea.</param>
        /// <param name="y2">Y finale in cui terminare il disegno della linea.</param>
        public LinePDF(float x1, float y1, float x2, float y2)
            : this()
        {
            X1 = x1;
            Y1 = y1;
            X2 = x2;
            Y2 = y2;            
        }

        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="x1">X iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="y1">Y iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="x2">X finale in cui terminare il disegno della linea.</param>
        /// <param name="y2">Y finale in cui terminare il disegno della linea.</param>
        /// <param name="width">Spessore della linea.Se non impostato=1.</param>
        public LinePDF(float x1, float y1, float x2, float y2, float width)
            : this(x1, y1, x2, y2)
        {
            _width = width;            
        }

        /// <summary>
        /// Costruttore
        /// </summary>
        /// <param name="x1">X iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="y1">Y iniziale da cui iniziare a disegnare la linea.</param>
        /// <param name="x2">X finale in cui terminare il disegno della linea.</param>
        /// <param name="y2">Y finale in cui terminare il disegno della linea.</param>
        /// <param name="width">Spessore della linea.Se non impostato=1.</param>
        /// <param name="color">Colore della linea.Se non impostato è ColorPDF(118, 136, 155).</param>
        public LinePDF(float x1, float y1, float x2, float y2, float width, ColorPDF color)
            : this(x1, y1, x2, y2, 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
    }
}
