using CareFusion.Mosaic.Converters.Wwks2.Types;
using CareFusion.Mosaic.Interfaces.Messages.Input;
using CareFusion.Mosaic.Interfaces.Types.Packs;
using CareFusion.Mosaic.Interfaces.Types.Stock;
using System;
using System.Xml.Serialization;

namespace CareFusion.Mosaic.Converters.Wwks2.Messages.Input
{
    public class InputMessagePack : IInputMessagePack
    {
        #region IInputMessagePack Specific Properties

        /// <inheritdoc/>
        [XmlAttribute]
        public uint Index { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public ulong Id { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string DeliveryNumber { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string BatchNumber { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string ExternalId { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string SerialNumber { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string ExpiryDate { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public ExpiryDateSource ExpiryDateSource { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string StockInDate { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string ScanCode { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public uint SubItemQuantity { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public uint Depth { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public uint Width { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public uint Height { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public PackShape Shape { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public bool IsInFridge { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public PackState State { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string StockLocationId { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public string MachineLocation { get; set; }

        /// <inheritdoc/>
        [XmlAttribute]
        public Guid GUID { get; set; }

        /// <inheritdoc/>
        [XmlElement]
        public InputMessagePackHandling Handling { get; set; }

        #endregion
    }
}