using FluentValidation;
using System;

namespace Kean.Domain.Task.Commands
{
    /// <summary>
    /// 创建输送命令
    /// </summary>
    public class BypassCommand : CommandValidator<BypassCommand>, ICommand
    {
        /// <summary>
        /// 库房
        /// </summary>
        public int Warehouse { get; set; }

        /// <summary>
        /// 托盘条码
        /// </summary>
        public string Barcode { get; set; }

        /// <summary>
        /// 负载规格
        /// </summary>
        public int? Spec { get; set; }

        /// <summary>
        /// 操作位置
        /// </summary>
        public object Original { get; set; }

        /// <summary>
        /// 目标位置
        /// </summary>
        public object Destination { get; set; }

        /// <summary>
        /// 优先级
        /// </summary>
        public int? Priority { get; set; }

        /// <summary>
        /// 操作者
        /// </summary>
        public int Operator { get; set; }

        /// <summary>
        /// 是否手动
        /// </summary>
        public bool Manual { get; set; }

        /// <summary>
        /// 标签
        /// </summary>
        public string Tag { get; set; }

        /// <summary>
        /// 前续连接
        /// </summary>
        public int? Previous { get; set; }

        /// <summary>
        /// 时间戳
        /// </summary>
        internal DateTime? Timestamp { get; set; }

        /// <summary>
        /// 验证项
        /// </summary>
        protected override void Validation()
        {
            RuleFor(r => r.Warehouse).NotEmpty().WithMessage("库房不允许空");
            RuleFor(r => r.Barcode).NotEmpty().WithMessage("托盘条码不允许空");
            RuleFor(r => r.Original).NotEmpty().WithMessage("操作位置不允许空");
            RuleFor(r => r.Destination).NotEmpty().WithMessage("目标位置不允许空");
        }

        /// <summary>
        /// 标识
        /// </summary>
        [Output]
        public int Id { get; private set; }
    }
}