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.OneMessage
{
    public class DeliveryDefinition : XmlLinqBase
    {
        #region Built'in classes

        #region ElementNames class
        /// <summary>
        /// Az XML fájlban ilyen elem nevek találhatóak egy "DeliveryDefinition" elemben.
        /// </summary>
        public new class ElementNames : XmlLinqBase.ElementNames
        {
            /// <summary>
            /// 'ConnectionStringName' elem név.
            /// </summary>
            public const string CONNECTIONSTRINGNAME = "ConnectionStringName";

            /// <summary>
            /// 'SendAs' elem név.
            /// </summary>
            public const string SENDAS = "SendAs";

            /// <summary>
            /// 'SendCopyTo' elem név.
            /// </summary>
            public const string SENDCOPYTO = "SendCopyTo";
        }
        #endregion ElementNames class

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

        #endregion Built'in classes

        #region Properties

        /// <summary>
        /// A szállítási definíció neve.
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// A kapcsolati sztring neve.
        /// </summary>
        public string ConnectionStringName { get; set; }

        /// <summary>
        /// A feladó email címe.
        /// </summary>
        public string SendAs { get; set; }

        /// <summary>
        /// A másolatot kapók vesszővel elválasztott email cím listája.
        /// </summary>
        public string SendCopyTo { get; set; }

        #endregion Properties

        #region Constructor
        /// <summary>
        /// Példányosítás egy XElement alapján.
        /// Ha <paramref name="xelement"/> paraméter null, akkor nem történik értékadás
        /// de a példány létrejön.
        /// </summary>
        /// <param name="xelement">Egy "DeliveryDefinition" element objektum.</param>
        public DeliveryDefinition(XElement xelement)
        {
            if (xelement != null)
            {
                this.Name = GetValue(AttributeNames.NAME, xelement, "", true, true);
                this.ConnectionStringName = GetValue(xelement.Element(ElementNames.CONNECTIONSTRINGNAME), "", true, true);
                this.SendAs = GetValue(xelement.Element(ElementNames.SENDAS), "");
                this.SendCopyTo = GetValue(xelement.Element(ElementNames.SENDCOPYTO), "");
            }
        }
        #endregion Constructor
    }
}
