using Quadarax.Foundation.Core.Data;

namespace qdr.fnd.core.pqueue
{
    public interface IPsQueueItemDescriptor
    {
        /// <summary>
        /// Holds information about the owner (type of owner) of the queue item.
        /// </summary>
        public string Owner { get; }
        /// <summary>
        /// Holds information about the owner identifier (reference number).
        /// </summary>
        public string OwnerRef { get; }
        /// <summary>
        /// Priority of the queue item. Lower number means higher priority.
        /// </summary>
        int Priority { get; }
        
        /// <summary>
        /// Date and time when the queue item will be possibly processed.
        /// </summary>
        DateTime ValidFrom { get; }

        /// <summary>
        /// Date and time when the queue item will be expired. If null, the queue item will never expire.
        /// </summary>
        DateTime? ValidTo { get; }

        /// <summary>
        /// Defines initial number of attempts left to process the queue item. When item will be reset uses this value.
        /// </summary>
        int AtteptsInitial { get; }

        /// <summary>
        /// Class name of the process executing provider.
        /// </summary>
        string ProcessProviderClass { get; }
        /// <summary>
        /// Collection of input and output attributes of current process.
        /// </summary>
        IEnumerable<ITypedArgument> Arguments { get; }
    }
}
