using System.Xml.Linq;

using Vrh.XmlProcessing;

namespace Vrh.OneReport
{
    /// <summary>
    /// A "DefaultFolder" elemet reprezentáló osztály.
    /// "General" és "Report" elemben is előfordul.
    /// </summary>
    public class FolderElement : XmlLinqBase
    {
        #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>
            /// 'action' attribútum név.
            /// </summary>
            public const string EXPORT = "Export";

            /// <summary>
            /// 'file' attribútum név.
            /// </summary>
            public const string FILE = "File";

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

        #region Properties

        /// <summary>
        /// Exportok számára alapértelmezett mappa.
        /// </summary>
        public string Export { get; set; }

        /// <summary>
        /// Az oputput-ok (riportok) számára alapértelmezett mappa.
        /// </summary>
        public string File { get; set; }

        /// <summary>
        /// Az RDL fájlok forrásmappája.
        /// </summary>
        public string Rdl { get; set; }

        #endregion Properties

        #region Constructor
        /// <summary>
        /// Példány létrehozása egy XElement alapján.
        /// </summary>
        /// <param name="xelement">A "DefaultFolder" elem.</param>
        /// <param name="defaultFolder">
        /// Egy FolderElement objektum, mely alapértelmezett értékeket tartalmaz.
        /// </param>
        public FolderElement(XElement xelement, FolderElement defaultFolder = null)
        {
            if (xelement != null)
            {
                this.Export = GetValue(
                    xelement.Attribute(AttributeNames.EXPORT),
                    defaultFolder == null ? "" : defaultFolder.Export
                );
                this.File = GetValue(
                    xelement.Attribute(AttributeNames.FILE),
                    defaultFolder == null ? "" : defaultFolder.File
                );
                this.Rdl = GetValue(
                    xelement.Attribute(AttributeNames.RDL),
                    defaultFolder == null ? "" : defaultFolder.Rdl
                );
            }
            else
            {
                if (defaultFolder != null)
                {
                    this.Export = defaultFolder.Export;
                    this.File = defaultFolder.File;
                    this.Rdl = defaultFolder.Rdl;
                }
            }
        }
        #endregion Constructor
    }
}
