using System.Xml.Linq;

using VRH.Log4Pro.MultiLanguageManager;
using Vrh.XmlProcessing;
using System.Collections.Generic;
using System.Linq;

namespace Vrh.OneReport
{
    /// <summary>
    /// A "DefaultFormat" elemet reprezentáló osztály.
    /// "General" és "Report" elemben is előfordul.
    /// </summary>
    public class PresetElement : XmlLinqBase
    {
		#region ElementNames static class
		public new class ElementNames : XmlLinqBase.ElementNames
		{
			/// <summary>
			/// 'CommonPresets' elem név.
			/// </summary>
			public const string PRESET = "Preset";
		}
		#endregion ElementNames static class

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

            /// <summary>
            /// 'Name' attribútum név.
            /// </summary>
            public const string ID = "Id";
        }
        #endregion AttributeNames static class

        #region Properties

        /// <summary>
        /// Preset azonosítója.
        /// </summary>
        public string Id { get; set; }

        /// <summary>
        /// Preset megnevezése (leírása).
        /// </summary>
        public string DisplayName { get; set; }

        #endregion Properties

        #region Constructor
        /// <summary>
        /// Példány létrehozása egy XElement alapján.
        /// </summary>
        /// <param name="xelement">A "Preset" elem.</param>
        public PresetElement(XElement xelement)
        {
            if (xelement != null)
            {
                this.Id = GetValue(AttributeNames.ID, xelement, "", true, true);

                this.DisplayName = GetValue(xelement.Attribute(AttributeNames.DISPLAYNAME), "");
            }
        }
		#endregion Constructor

		#region PresetElementList static constructor
		/// <summary>
		/// Egy preset xml elemlistát tartalmazó xml elemből előállítja a PresetElement listát
		/// Ha nincs preset lista, akkor üres listával tér vissza
		/// </summary>
		/// <param name="presetlistContainerXelement"></param>
		/// <returns></returns>
		public static List<PresetElement> PresetElementList(XElement presetlistContainerXelement)
		{
			List<PresetElement> rl = new List<PresetElement>();
			if (presetlistContainerXelement != null)
			{
				var presetsXmlList = presetlistContainerXelement.Elements(XName.Get(ElementNames.PRESET)).ToList();
				if (presetsXmlList != null && presetsXmlList.Any())
				{
					foreach (var presetXE in presetsXmlList) { rl.Add(new PresetElement(presetXE)); }
				}
			}
			return rl;
		}
		#endregion PresetElementList static constructor

	}
}
