using CareFusion.Lib.StorageSystem.Helpers.Enums;
using CareFusion.Lib.StorageSystem.Wwks2.Messages.Input;
using System;

namespace CareFusion.Lib.StorageSystem.Interfaces.Messages.Input
{
    public interface IInputResponsePack
    {
        /// <summary>
        /// Index number of the pack. Used only if the InputResponse covers multiple packs. The index number corresponds to the one in the InputRequest.
        /// </summary>
        int 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 specified in the InputRequest.
        /// </summary>
        string DeliveryNumber { get; set; }

        /// <summary>
        /// Batch number of the pack.
        /// Mandatory if the attribute was defined in the InputRequest and if omitted; requested value may be overwritten by the default value “” depending on ASRS implementation
        /// </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).
        /// Mandatory if the attribute was defined in the InputRequest and if omitted; requested value may be overwritten by the default value "" depending on ASRS implementation
        /// </summary>
        string ExternalId { get; set; }

        /// <summary>
        /// Serial number of the pack.
        /// Mandatory if the attribute was defined in the InputRequest and if omitted; requested value may be overwritten by the default value "" depending on ASRS implementation
        /// </summary>
        string SerialNumber { get; set; }

        /// <summary>
        /// Expiration date of the pack in format YYYY-MM-DD.
        /// Mandatory if the attribute was defined in the InputRequest and if omitted; requested value may be overwritten by the default value '1899-12-31' depending on ASRS implementation
        /// </summary>
        DateTime ExpiryDate { get; set; }

        /// <summary>
        /// Source of the expiration date.
        /// </summary>
        ExpiryDateSource ExpiryDateSource { get; set; }

        /// <summary>
        /// Number of units (e.g. tablets or ampules) currently inside the pack.
        /// The pharmacy IT system can overwrite the original value from the InputRequest with this. The value "0" means that the pack is full (not opened).
        /// Mandatory if the attribute was defined in the InputRequest and if omitted, requested value may be overwritten by the default value 0 depending on ASRS implementation
        /// </summary>
        int SubItemQuantity { get; set; }

        /// <summary>
        /// ID of the stock location in the automated storage and retrieval system to be used. Is only used when an automated storage and retrieval system is divided into several virtual stock locations.
        /// Mandatory if the attribute was defined in the InputRequest and if omitted; requested value may be overwritten by the default value “No location” depending on ASRS implementation
        /// </summary>
        string StockLocationId { get; set; }

        /// <summary>
        /// Identification of the requesting machine intended to be used for storing the pack.
        /// </summary>
        string MachineLocation { get; set; }

        /// <summary>
        /// Instructions for pack handling.
        /// </summary>
        InputResponsePackHandling Handling { get; set; }
    }
}