using System.Collections.Generic;
using System.Linq;
using WCS.BaseExtensions;
using WCS.Service.Extensions;
using WCS.WebApi.WMS;
using WCS.WebApi.WMS.Response;
namespace WCS.Service.Helpers
{
    /// 
    /// 处理完成任务记录集合
    /// 
    /// 
    public class FinishTaskList
    {
        public FinishTaskList(T finishCode, StationDevice station)
        {
            FinishCode = finishCode;
            Station = station;
        }
        /// 
        /// 完成
        /// 
        public T FinishCode { get; set; }
        /// 
        /// 对应设备信息
        /// 
        public StationDevice Station { get; set; }
    }
    /// 
    /// 处理完成任务记录集合
    /// 
    /// 
    public class FinishTaskList
    {
        public FinishTaskList(T finishCode, T1 station)
        {
            FinishCode = finishCode;
            Station = station;
        }
        /// 
        /// 完成
        /// 
        public T FinishCode { get; set; }
        /// 
        /// 对应设备信息
        /// 
        public T1 Station { get; set; }
    }
    public static class FinishTaskListExtensions
    {
        /// 
        /// 入库可用任务数是否有效
        /// 
        /// 
        /// 
        public static void Valid(this List> finishes)
        {
            var maxGoodsnum = finishes.Select(v => v.Station.Data2.Goodsnum).OrderByDescending(v => v).FirstOrDefault();
            if (finishes.Count != maxGoodsnum) throw new WarnException($"可用货物数{finishes.Count},实际货物数{maxGoodsnum}");
            if (!finishes.Any()) throw new DoException("没有任务");
        }
        /// 
        /// 入库可用任务数是否有效
        /// 
        /// 
        /// 
        public static List GetWMSInTask(this List> finishes)
        {
            if (!finishes.Any()) throw new DoException("没有任务");
            var items = finishes.ToArray();
            var infos = items.Length switch
            {
                1 => WMS.I_WCS_GetInTask(items[0].FinishCode, items[0].Station.Entity.CODE),
                2 => WMS.I_WCS_GetInTask(items[0].FinishCode, items[0].Station.Entity.CODE, items[1].FinishCode, items[1].Station.Entity.CODE),
                _ => throw new WarnException($"一组任务数量最大为2,当前{items.Length}"),
            };
            return infos;
        }
    }
}