using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Vrh.XmlProcessing;

namespace Vrh.OneReport
{
    /// <summary>
    /// A OneReport xml-ben a "General"-ben megadott helyen  a "AutoPurge" elemet reprezentálja.
    /// </summary>
    public class AutoPurgeElement : XmlLinqBase
    {
        #region Constants
		/// <summary>
		/// AutoPurge Timout alapértelmezett értéke
		/// </summary>
		public const int DEFAULT_TIMOUT = 300;

		/// <summary>
		/// AutoPurge tmp folder alapértelmezett értéke
		/// </summary>
		public const string DEFAULT_TMPFOLDER = "";
		#endregion Constants

		#region AttributeNames static class
		/// <summary>
		/// Az XML fájlban ilyen attribútum nevek találhatóak egy "general.Timout" elemben.
		/// </summary>
		public static class AttributeNames
        {
			/// <summary>
			/// 'TmpFolder' attribútum név.
			/// </summary>
			public const string TMPFOLDER = "TmpFolder";

			/// <summary>
			/// 'Timeout' attributum név.
			/// </summary>
			public const string TIMEOUT = "Timeout";
		}
		#endregion AttributeNames static class

		#region Properties

        /// <summary>
        /// Auto purge timeout érték másodpercben.
        /// Alapértelmezett értéke: 60
        /// </summary>
        public int Timeout { get; set; } = DEFAULT_TIMOUT;

		/// <summary>
		/// Ideiglenes fileok tárolási mappája
		/// </summary>
		public string TmpFolder  { get; set; } = DEFAULT_TMPFOLDER;
		#endregion Properties

		#region Constructors
		/// <summary>
		/// Alapértelmezett konstructor
		/// </summary>
		public AutoPurgeElement() 
		{
			this.TmpFolder = DEFAULT_TMPFOLDER;
			this.Timeout = DEFAULT_TIMOUT;
		}

		/// <summary>
		/// Konstruktor az XElement feldolgozásával.
		/// </summary>
		/// <param name="xelement">Egy "AutoPurge" XElement.</param>
		/// <param name="defaultAutoPurge">Az éppen érvényes alapértelmezés.</param>
		public AutoPurgeElement(XElement xelement=null, AutoPurgeElement defaultAutoPurge = null)
        {
			if (defaultAutoPurge == null) { defaultAutoPurge = new AutoPurgeElement(); }

            if (xelement != null)
            {
                this.TmpFolder = GetValue(xelement.Attribute(AttributeNames.TMPFOLDER), defaultAutoPurge.TmpFolder);
				this.Timeout= GetValue(xelement.Attribute(AttributeNames.TIMEOUT), defaultAutoPurge.Timeout);
			}
			else
            {
                this.TmpFolder = defaultAutoPurge.TmpFolder;
				this.Timeout = defaultAutoPurge.Timeout;
			}
        }
        #endregion Constructors
    }
}
