using System;

namespace CareFusion.Mosaic.Interfaces.Messages.Input
{
    public interface IInputRequestPack
    {
        /// <summary>
        /// Gets or sets the identifier.
        /// </summary>
        uint Index { get; set; }

        /// <summary>
        /// Barcode of the pack being placed into stock. This code is checked by the pharmacy IT system and compared against internal data.
        /// Based on the information contained in the code, the pharmacy IT system can decide whether the pack can be placed into stock.
        /// In case of a datamatrix code scanned, it depends on robot configuration if the attribute contains the full content of the scanned code or just the article identifying part of it.
        /// </summary>
        string ScanCode { get; set; }

        /// <summary>
        /// Stock delivery number for this pack.
        /// This data is only required if the attribute IsNewDelivery of the element InputRequest has the value "True".
        /// </summary>
        string DeliveryNumber { get; set; }

        /// <summary>
        /// Batch number of the pack. This attribute is used when the picker has entered a batch number.
        /// </summary>
        string BatchNumber { get; set; }

        /// <summary>
        /// External ID. Additional identifying attribute.
        /// This can be used, for example, to store additional information about a pack (deprecated: the serial number).
        /// </summary>
        string ExternalId { get; set; }

        /// <summary>
        /// Serial number of the pack.
        /// </summary>
        string SerialNumber { get; set; }

        /// <summary>
        /// Expiration date of the pack in format YYYY-MM-DD. This attribute is used when the picker has entered an expiration date.
        /// </summary>
        string ExpiryDate { get; set; }

        /// <summary>
        /// Source of Expiration date of the pack
        /// </summary>
        string ExpiryDateSource { get; set; }

        /// <summary>
        /// Number of units (e.g. tablets or ampules) currently inside the pack.
        /// The value "0" means that the pack is full (not opened).
        /// This attribute is used for the stock input of opened packs.
        /// </summary>
        uint SubItemQuantity { get; set; }

        /// <summary>
        /// ID of the selected stock location in the automated storage and retrieval system.
        /// Is only used when an automated storage and retrieval system is divided into several virtual stock locations.
        /// </summary>
        string StockLocationId { get; set; }

        /// <summary>
        /// Identification of the requesting machine intended to be used for storing the pack.
        /// Only relevant if the automated storage and retrieval system consists of several physical stand-alone machines.
        /// </summary>
        string MachineLocation { get; set; }

        /// <summary>
        /// Guid of the requested pack.
        /// </summary>
        Guid GUID { get; set; }
    }
}