namespace CareFusion.Lib.StorageSystem.Input
{
    /// <summary>
    /// Defines the different possible reject reasons for an infeed process.
    /// </summary>
    public enum InfeedInputRejectReason
    {
        /// <summary>
        /// There is no error.
        /// </summary>
        None,

        /// <summary>
        /// The IT system rejected the pack input.
        /// </summary>
        NotAllowed,

        /// <summary>
        /// The IT system rejected the pack input because the expiry date was missing.
        /// </summary>
        ExpiryDateRequired,

        /// <summary>
        /// The machine rejected the pack input because the expiry date of the pack is invalid.
        /// </summary>
        InvalidExpiryDate,

        /// <summary>
        /// The IT system rejected the pack input because the stock location was missing.
        /// </summary>
        StockLocationRequired,
               
        /// <summary>
        /// The storage system rejected the input because it has no fridge for the pack.
        /// </summary>
        FridgeRequired,

        /// <summary>
        /// The IT system rejected the pack input because the batch number was missing.
        /// </summary>
        BatchNumberRequired,

        /// <summary>
        /// The storage system rejected the input because the pack dimensions could not be determined.
        /// </summary>
        MeasurementError,

        /// <summary>
        /// Pack was removed before or while the storage system was inputting it (e.g. as part of an error handling action).
        /// </summary>
        PackAcknowledged,

        /// <summary>
        /// Input is currently not possible at this infeed.
        /// </summary>
        InputBroken,

        /// <summary>
        /// There is not enough space left in the machine to input the pack.
        /// </summary> 
        NoSpaceInMachine,

        /// <summary>
        /// There is not enough space left on the belt of the machine to input the pack.
        /// </summary>
        NoSpaceOnBelt,

        /// <summary>
        /// The Input feeder rejected placement of a pack.
        /// </summary>
        NoPackPlaced,

        /// <summary>
        /// The storage system had a timeout while waiting for pack placement.
        /// </summary>
        TimeoutWaitingForPack,

        /// <summary>
        /// No valid pack dimensions have been specified in the input request is unknown.
        /// </summary>
        UnknownPackDimensions,

        /// <summary>
        /// The tenant which has been specified in the input request is unknown.
        /// </summary>
        UnknownTenant,

        /// <summary>
        /// The stock location which has been specified in the input request is unknown.
        /// </summary>
        UnknownStockLocation,

        /// <summary>
        /// The infeed input process has been cancelled.
        /// </summary>
        TaskCancelled,

        /// <summary>
        /// System not Active
        /// </summary>
        SystemNotActive,

        /// <summary>
        /// The Input is work in progress
        /// </summary>
        InputProcessInProgress,

        /// <summary>
        /// An internal error was found
        /// </summary>
        InternalError,

        /// <summary>
        /// EmergencyStop was called
        /// </summary>
        EmergencyStop


    }
}
