using FluentValidation;
using Kean.Domain.Stock.Models;
using System;
using System.Collections.Generic;

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

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

        /// <summary>
        /// 目标位置
        /// </summary>
        public object Destination { get; set; }
        public object Original
        {
            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>
        public IEnumerable<int> Materials { get; set; }

        /// <summary>
        /// 
        /// </summary>
        public Batch Batch
        {
            get; set;
        }

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

        /// <summary>
        /// 验证项
        /// </summary>
        protected override void Validation()
        {
            RuleFor(r => r.Destination).NotEmpty().WithMessage("目标位置不允许空");
        }

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

        /// <summary>
        /// 事务
        /// </summary>
        public string Transaction
        {
            get; set;
        }

        /// <summary>
        /// 申请编号
        /// </summary>
        public string RequestNo
        {
            get; set;
        }

        /// <summary>
        /// 极片卷数量
        /// </summary>
        public int Qty
        {
            get; set;
        }

        /// <summary>
        /// 物料属性 状态
        /// </summary>
        public string Qc
        {
            get; set;
        }

        /// <summary>
        /// 物料属性 是否可用
        /// </summary>
        public bool enable
        {
            get; set;
        }

        /// <summary>
        /// 物料属性 是否本地
        /// </summary>
        public string IsLocal
        {
            get; set;
        }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark
        {
            get; set;
        }
    }
}