using AutoMapper;
using AutoMapper.Internal;
using BBWY.Client.APIServices;
using BBWY.Client.Helpers;
using BBWY.Client.Models;
using BBWY.Client.Models.APIModel.Request;
using BBWY.Client.Models.APIModel.Response.PackTask;
using BBWY.Client.Models.PackTask;
using BBWY.Client.Views.PackTask;
using BBWY.Common.Models;
using GalaSoft.MvvmLight.Command;
using HandyControl.Controls;
using Microsoft.Extensions.Logging;
using NPOI.Util;
using Org.BouncyCastle.Asn1.Crmf;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Reflection.Metadata.Ecma335;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
using System.Windows.Media.Imaging;

namespace BBWY.Client.ViewModels.PackTask
{
    public class PackServiceViewModel : BaseVM, IDenpendency
    {

        private string packUserName;
        /// <summary>
        /// 打包人
        /// </summary>
        public string PackUserName { get => packUserName; set { Set(ref packUserName, value); } }


        private int incrementPartTaskCount;
        /// <summary>
        /// 配件任务数量
        /// </summary>
        public int IncrementPartTaskCount { get => incrementPartTaskCount; set { Set(ref incrementPartTaskCount, value); } }



        //public ObservableCollection<string> incrementPartCountList = new ObservableCollection<string>() {
        //"0","1","2","3","4件以上"
        //};

        //public ObservableCollection<string> IncrementPartCountList { get => incrementPartCountList; set { Set(ref incrementPartCountList, value); } }

        private int incrementPartCount;
        /// <summary>
        /// 配件数量
        /// </summary>
        public int IncrementPartCount { get => incrementPartCount; set { Set(ref incrementPartCount, value); } }

        private string directionalFees;
        /// <summary>
        /// 定向费用
        /// </summary>
        public string DirectionalFees { get => directionalFees; set { Set(ref directionalFees, value); } }


        private BitmapImage barcodeImage;
        /// <summary>
        /// 任务Id条形码
        /// </summary>
        public BitmapImage BarcodeImage { get => barcodeImage; set { Set(ref barcodeImage, value); } }

        private BitmapImage taskImage;
        /// <summary>
        /// 任务Id条形码
        /// </summary>
        public BitmapImage TaskImage { get => taskImage; set { Set(ref taskImage, value); } }

        private string printName;

        public string PrintName { get => printName; set { Set(ref printName, value); } }

        private ObservableCollection<string> printList;
        /// <summary>
        /// 打印机列表
        /// </summary>
        public ObservableCollection<string> PrintList { get => printList; set { Set(ref printList, value); } }

        private ObservableCollection<PackTaskModel> packTaskList;
        /// <summary>
        /// 动态数据表
        /// </summary>
        public ObservableCollection<PackTaskModel> PackTaskList { get => packTaskList; set { Set(ref packTaskList, value); } }


        private PackTaskModel packTaskModel;

        public PackTaskModel PackTaskModel { get => packTaskModel; set { Set(ref packTaskModel, value); } } //


        public ICommand AddPackServiceCommand { get; set; }

        public ICommand AddBasicPackServiceCommand { get; set; }

        public ICommand AddIncreateServiceCommand { get; set; }

        public ICommand AddConsumableCommand { get; set; }

        public ICommand UpLoadPackCommand { get; set; }

        public ICommand SetAllCountCommand { get; set; }


        public ICommand PrintCommand { get; set; }

        readonly PackTaskService packTaskService;
        readonly ConsumableService consumableService;
        readonly PackDetailService packDetailService;
        readonly BatchPurchaseService batchPurchaseService;
        private ObservableCollection<PackItemModel> increateList = new ObservableCollection<PackItemModel>();
        public ObservableCollection<PackItemModel> IncreateList { get => increateList; set { Set(ref increateList, value); } } //

        //private ObservableCollection<PackItemModel>
        // packList = new ObservableCollection<PackItemModel>();
        //public ObservableCollection<PackItemModel> PackList { get => packList; set { Set(ref packList, value); } } //

        private ObservableCollection<PackItemModel>
            consumableServiceList = new ObservableCollection<PackItemModel>();
        public ObservableCollection<PackItemModel> ConsumableServiceList { get => consumableServiceList; set { Set(ref consumableServiceList, value); } } //




        private ObservableCollection<PackItemModel> basicPackProcessList = new ObservableCollection<PackItemModel>();
        private ObservableCollection<PackItemModel> incrementProcessList = new ObservableCollection<PackItemModel>();
        /// <summary>
        ///增量工序
        /// </summary>
        public ObservableCollection<PackItemModel> IncrementProcessList { get => incrementProcessList; set { Set(ref incrementProcessList, value); } } //
        /// <summary>
        /// 基础包装工序
        /// </summary>
        public ObservableCollection<PackItemModel> BasicPackProcessList { get => basicPackProcessList; set { Set(ref basicPackProcessList, value); } }





        private string discount = "1";
        /// <summary>
        /// 折扣
        /// </summary>
        public string Discount { get => discount; set { Set(ref discount, value); } } //


        public ObservableCollection<PackServiceDTO> IncreateServiceList { get; set; } = new ObservableCollection<PackServiceDTO>();
        public ObservableCollection<PackUser> MemberList { get; set; } = new ObservableCollection<PackUser>();
        public ObservableCollection<ConsumableModel> ConsumableList { get; set; } = new ObservableCollection<ConsumableModel>();
        public ObservableCollection<PackServiceDTO> PackServiceList { get; set; } = new ObservableCollection<PackServiceDTO>();

        /// <summary>
        /// 基础包装服务项目列表
        /// </summary>
        public ObservableCollection<PackServiceDTO> BasicPackServiceList { get; set; } = new ObservableCollection<PackServiceDTO>();

        private readonly PackServiceService packServiceService;

        /// <summary>
        /// 加载原数据
        /// </summary>
        public List<PackItemModel> LoadList = new List<PackItemModel>();



        public void InitPrintList()
        {



            TaskImage = MyPrintHelper.GetBarcodeImage(TaskId.ToString(), 300, 60);

            BarcodeImage = MyPrintHelper.GetBarcodeImage(SkuId, 300, 60);


            PrintList = new ObservableCollection<string>();
            var printingNames = PrinterSettings.InstalledPrinters;//获取本机的打印机数据
            int index = -1;
            int selectIndex = 0;
            foreach (string name in printingNames)
            {
                if (name == "Microsoft XPS Document Writer" || name == "Microsoft Print to PDF" || name == "Fax")
                {
                    continue;
                }
                index++;
                if (name.Contains("Deli"))
                {
                    selectIndex = index;
                }
                PrintList.Add(name);
            }
            try
            {
                var applicationPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                string printNames = Path.Combine(applicationPath, "printName.init");
                if (File.Exists(printNames))
                {
                    PrintName = File.ReadAllText(printNames);
                }
                else
                {
                    if (PrintList.Count > 0)
                    {
                        PrintName = PrintList[0].ToString();
                    }
                }
            }
            catch (Exception)
            {


            }

        }

        public PackServiceViewModel(PackTaskService packTaskService, ConsumableService consumableService, PackServiceService packServiceService, PackDetailService packDetailService, BatchPurchaseService batchPurchaseService)//, long taskId
        {
            //TaskId = taskId;
            this.consumableService = consumableService;
            this.packTaskService = packTaskService;
            this.packServiceService = packServiceService;
            this.packDetailService = packDetailService;
            this.batchPurchaseService = batchPurchaseService;


            AddIncreateServiceCommand = new RelayCommand(AddIncreateService);
            AddPackServiceCommand = new RelayCommand(AddPackService);
            AddBasicPackServiceCommand = new RelayCommand(AddBasicPackService);
            AddConsumableCommand = new RelayCommand(AddConsumable);
            UpLoadPackCommand = new RelayCommand<object>(UpLoadPack);
            SetAllCountCommand = new RelayCommand<object>(SetAllCount);

            //加载数据
            //LoadPackDatas();

        }

        /// <summary>
        /// 加载任务数据
        /// </summary>
        public void LoadPackDatas()
        {
            IncrementPartTaskCount = TaskCount;
            try
            {
                InitPrintList();
            }
            catch (Exception)
            {


            }

            LoadList = new List<PackItemModel>();
            Task task = Task.Factory.StartNew(() =>
            {
                var resMember = this.packTaskService.GetPackMembers();//成员表
                if (resMember.Success)
                {
                    MemberList = new ObservableCollection<PackUser>();
                    foreach (var item in resMember.Data)
                    {
                        App.Current.Dispatcher.Invoke(() =>
                        {
                            MemberList.Add(item);
                        });
                    }
                }
                var res = this.packDetailService.GetPackTaskDetail(TaskId);


          
                if (res.Success)
                {
                    IncrementPartCount = res.Data.IncrementPartCount==null? 0 : res.Data.IncrementPartCount.Value;

                    if (res.Data != null && res.Data.IncrementItemList.Count() > 0)
                    {
                        IncreateServiceList = new ObservableCollection<PackServiceDTO>();
                        foreach (var packService in res.Data.IncrementItemList)
                        {
                            if (packService.ServiceType == ServiceType.增值服务)
                                App.Current.Dispatcher.Invoke(() =>
                                {
                                    IncreateServiceList.Add(packService);//加载增值服务列表
                                });

                        }
                    }

                    if (res.Data != null && res.Data.ProcessItemList.Count() > 0)
                    {
                        PackServiceList = new ObservableCollection<PackServiceDTO>();
                        BasicPackServiceList = new ObservableCollection<PackServiceDTO>();
                        foreach (var packService in res.Data.ProcessItemList)
                        {
                            if (packService.ServiceType == ServiceType.打包服务)
                                App.Current.Dispatcher.Invoke(() =>
                                {
                                    PackServiceList.Add(packService);//加载工序服务列表
                                    BasicPackServiceList.Add(packService);
                                });
                        }
                    }

                    if (res.Data != null && res.Data.ConsumableItemList.Count() > 0)
                    {
                        ConsumableList = new ObservableCollection<ConsumableModel>();
                        foreach (var item in res.Data.ConsumableItemList)
                        {

                            App.Current.Dispatcher.Invoke(() =>
                            {

                                ConsumableList.Add(new ConsumableModel(consumableService)
                                {
                                    Width = item.Width,
                                    Weigth = item.Weigth,
                                    Remark = item.Remark,
                                    Price = item.Price,
                                    Name = item.Name,
                                    Length = item.Length,
                                    Heigth = item.Heigth,
                                    Id = item.Id
                                });
                            });
                        }
                    }


                    if (res.Data.IncreateList != null)
                    {
                        IncreateList = new ObservableCollection<PackItemModel>();

                        foreach (var item in res.Data.IncreateList)
                        {
                            App.Current.Dispatcher.Invoke(() =>
                            {
                                IncreateList.Add(new PackItemModel()
                                {
                                    MemberList = MemberList,
                                    IncreateServiceList = IncreateServiceList,
                                    ItemCount = item.ItemCount,
                                    ItemName = item.ItemName,
                                    SelectId = item.SelectId,
                                    SelectUserId = item.SelectUserId,
                                    MemberName = item.MemberName

                                });
                            });
                        }

                    }
                    if (res.Data.ConsumableList != null)
                    {
                        ConsumableServiceList = new ObservableCollection<PackItemModel>();
                        foreach (var item in res.Data.ConsumableList)
                        {
                            App.Current.Dispatcher.Invoke(() =>
                            {
                                ConsumableServiceList.Add(new PackItemModel()
                                {
                                    MemberList = MemberList,
                                    ConsumableList = ConsumableList,
                                    ItemCount = item.ItemCount,
                                    ItemName = item.ItemName,
                                    SelectId = item.SelectId,


                                });
                            });
                        }
                    }


                    if (res.Data.IncrementProcessList != null)
                    {
                        IncrementProcessList = new ObservableCollection<PackItemModel>();
                        foreach (var item in res.Data.IncrementProcessList)
                        {
                            App.Current.Dispatcher.Invoke(() =>
                            {
                                IncrementProcessList.Add(new PackItemModel()
                                {
                                    MemberList = MemberList,
                                    PackServiceList = PackServiceList.Copy(),
                                    ItemCount = item.ItemCount,
                                    ItemName = item.ItemName,
                                    SelectId = item.SelectId,
                                    SelectUserId = item.SelectUserId,
                                    MemberName = item.MemberName

                                });
                            });
                        }
                    }

                    if (res.Data.BasicPackProcessList != null)
                    {
                        BasicPackProcessList = new ObservableCollection<PackItemModel>();
                        foreach (var item in res.Data.BasicPackProcessList)
                        {
                            App.Current.Dispatcher.Invoke(() =>
                            {
                                BasicPackProcessList.Add(new PackItemModel()
                                {
                                    MemberList = MemberList,
                                    PackServiceList = PackServiceList.Copy(),
                                    ItemCount = item.ItemCount,
                                    ItemName = item.ItemName,
                                    SelectId = item.SelectId,
                                    SelectUserId = item.SelectUserId,
                                    MemberName = item.MemberName

                                });
                            });
                        }
                    }


                    LoadList.AddRange(IncreateList);
                    LoadList.AddRange(IncrementProcessList);
                    DirectionalFees = res.Data.DirectionalFees?.ToString();
                }
            });
        }

        /// <summary>
        /// 批量设置耗材数量
        /// </summary>
        /// <param name="obj"></param>
        private void SetAllCount(object obj)
        {

            SetCountWindow set = new SetCountWindow();
            set.SetCount = new Action<int>((s) =>
            {
                var lbox = obj as ListBox;
                var serviceList = lbox.ItemsSource as ObservableCollection<PackItemModel>;
                foreach (var item in serviceList)
                {
                    if (item.ItemName == null)
                    {
                        item.ItemName = ConsumableList.SingleOrDefault(c => c.Id == item.SelectId).Name;
                    }

                    item.ItemCount = s;
                }
                lbox.ItemsSource = serviceList;
            });
            set.Show();
        }

        private long taskId;
        public long TaskId { get => taskId; set { Set(ref taskId, value); } } //


        private int taskCount;
        public int TaskCount { get => taskCount; set { Set(ref taskCount, value); } } //
        public string OrderId { get; set; }
        public string SkuId { get; set; }



        private List<PackItemModel> IsOverCount(ObservableCollection<PackItemModel> packItemModels, bool needUserId = true)
        {


            List<PackItemModel> disItems = new List<PackItemModel>();

            foreach (var packItem in packItemModels)//增值服务上传
            {
                var item = new PackItemModel
                {
                    ItemCount = packItem.ItemCount,
                    SelectId = packItem.SelectId,
                    SelectUserId = packItem.SelectUserId,
                    ItemName = packItem.ItemName,
                    MemberName = packItem.MemberName
                };
                if (needUserId)
                    if (item.SelectId <= 0 || string.IsNullOrEmpty(item.SelectUserId) || item.ItemCount <= 0)
                    {
                        System.Windows.MessageBox.Show($"数据输入有误");
                        return null;
                    }
                    else
                 if (item.SelectId <= 0 || item.ItemCount <= 0)
                    {
                        System.Windows.MessageBox.Show($"数据输入有误");
                        return null;
                    }

                if (item.ItemCount > TaskCount)
                {
                    System.Windows.MessageBox.Show($"{item.ItemName}:{item.ItemCount}超出任务量{TaskCount}");
                    return null;
                }



                if (disItems.Select(a => a.SelectId).Contains(item.SelectId))//相同服务 存在累加
                {

                    var data = disItems.SingleOrDefault(a => a.SelectId == item.SelectId);

                    if (data != null) data.ItemCount += item.ItemCount;

                    if (data.ItemCount > TaskCount)//累积超出任务量
                    {
                        System.Windows.MessageBox.Show($"{item.ItemName}:{data.ItemCount}超出任务量{TaskCount}");
                        return null;
                    }

                    continue;
                }
                disItems.Add(item);
            }



            return disItems;
        }


        /// <summary>
        /// 上传数据   (判断是否超量)  统一上传
        /// </summary>
        private void UpLoadPack(object obj)
        {
            decimal? directFees = null;
            if (!string.IsNullOrEmpty(DirectionalFees))
            {
                try
                {
                    directFees = decimal.Parse(DirectionalFees);
                }
                catch (Exception)
                {

                    directFees = null;
                }

            }


            PackTaskDetailRequest packTaskDetail = new PackTaskDetailRequest();
            packTaskDetail.DirectionalFees = directFees;
            packTaskDetail.IncrementPartCount = IncrementPartCount;
            packTaskDetail.IncrementPartTaskCount = IncrementPartTaskCount;
            packTaskDetail.TaskId = TaskId;

            decimal IncreateFees = 0, PackFees = 0, ConsumableFees = 0, DiscountPrice = 0;

            var disIncreateList = IsOverCount(IncreateList);
            if (disIncreateList == null) return;

            var disBasicPackProcessList = IsOverCount(BasicPackProcessList);
            if (disBasicPackProcessList == null) return;

            if (disBasicPackProcessList.Select(d => d.SelectId).Distinct().Count() > 2)
            {
                System.Windows.MessageBox.Show("基础包装工序不能超过两道");
                return;
            } 

            var disIncrementProcessList = IsOverCount(IncrementProcessList);
            if (disIncrementProcessList == null) return;

            var disConsumableServiceList = IsOverCount(ConsumableServiceList, false);
            if (disConsumableServiceList == null) return;

            packTaskDetail.IncreateList = IncreateList.ToList();
            packTaskDetail.BasicPackProcessList = BasicPackProcessList.ToList();
            packTaskDetail.IncrementProcessList = IncrementProcessList.ToList();
            packTaskDetail.ConsumableList = disConsumableServiceList;

            var res = packDetailService.SetPackTaskDetail(packTaskDetail);
            if (res != null && res.Success)
            {
                // new TipsWindow("上传成功!").Show();
                var win = obj as System.Windows.Window;
                if (SetAllFees != null)
                    SetAllFees();
                win.Close();
            }
        }




        //private void UpLoadPack1(object obj)
        //{
        //    decimal upDisCount = 1;
        //    if (string.IsNullOrEmpty(Discount)) upDisCount = 1;

        //    decimal.TryParse(Discount, out upDisCount);
        //    if (upDisCount == 0)
        //    {
        //        new TipsWindow("折扣输入有误");
        //        return;
        //    }
        //    UploadServiceRequest uploadService = new UploadServiceRequest();
        //    uploadService.Discount = upDisCount;

        //    List<PackItemModel> packServiceList = new List<PackItemModel>();



        //    uploadService.TaskId = TaskId;
        //    List<PackServiceDTO> uploadServices = new List<PackServiceDTO>();

        //    //  List<ConsumableTaskModel> consumableTasks = new List<ConsumableTaskModel>();
        //    ///上传 删除的数据   //上传保存数据  //上传总数据
        //    List<PersonTaskModel> addDatas = new List<PersonTaskModel>();
        //    List<PersonTaskModel> delDatas = new List<PersonTaskModel>();

        //    List<PersonTaskModel> PersonTaskModels = new List<PersonTaskModel>();


        //    List<PackServiceMemberModel> allPackServiceTasks = new List<PackServiceMemberModel>();
        //    List<ConsumableTaskModel> allConsumableTasks = new List<ConsumableTaskModel>();
        //    FeesItemResponse feesItem = new FeesItemResponse(); ;
        //    List<PackServiceMemberModel> PackServiceMembers = new List<PackServiceMemberModel>();
        //    //获取打包人员
        //    List<string> packUsers = new List<string>();

        //    decimal singleFees = 0;
        //    decimal AllFees = 0;
        //    decimal price = 0;

        //    decimal IncreateFees = 0, PackFees = 0, ConsumableFees = 0, DiscountPrice = 0;
        //    foreach (var item in IncreateList)//增值服务上传
        //    {
        //        if (item.SelectId <= 0 || string.IsNullOrEmpty(item.SelectUserId) || item.ItemCount <= 0)
        //        {
        //            new TipsWindow($"数据输入有误").Show();
        //            return;
        //        }
        //        var member = MemberList.SingleOrDefault(m => m.Id == item.SelectUserId);
        //        if (member != null && !packUsers.Contains(member.UserName))
        //        {
        //            packUsers.Add(member.UserName);
        //        }

        //        if (item.ItemCount > TaskCount)
        //        {
        //            new TipsWindow($"{item.ItemName}:{item.ItemCount}超出任务量{TaskCount}").Show();
        //            return;
        //        }
        //        price = IncreateServiceList.First(i => i.Id == item.SelectId).Price;
        //        singleFees += price;
        //        AllFees += item.ItemCount * price;
        //        IncreateFees += item.ItemCount * price;



        //        if (PackServiceMembers.Select(a => a.PackServiceId).Contains(item.SelectId))//相同服务 存在累加
        //        {
        //            var inMembers = PackServiceMembers.SingleOrDefault(a => a.UserId == item.SelectUserId && a.PackServiceId == item.SelectId);
        //            if (inMembers != null)
        //                inMembers.PackServiceCount += item.ItemCount;



        //            var data = PackServiceMembers.SingleOrDefault(a => a.PackServiceId == item.SelectId);
        //            var feeItem = feesItem.ServiceList.SingleOrDefault(f => f.ItemName == item.ItemName);
        //            if (data != null) data.PackServiceCount += item.ItemCount;
        //            if (feeItem != null) feeItem.ItemCount += item.ItemCount;
        //            if (data.PackServiceCount > TaskCount)//累积超出任务量
        //            {
        //                new TipsWindow($"{item.ItemName}:{data.PackServiceCount}超出任务量{TaskCount}").Show();
        //                return;
        //            }

        //            continue;
        //        }

        //        PackServiceMembers.Add(new PackServiceMemberModel
        //        {
        //            UserId = item.SelectUserId,
        //            PackServiceCount = item.ItemCount,
        //            PackServiceId = item.SelectId,
        //            Price = price,
        //            ServiceType = ServiceType.增值服务
        //        });


        //        feesItem.ServiceList.Add(new ServiceItemResponse
        //        {
        //            ServiceType = ServiceType.增值服务,
        //            ItemCount = item.ItemCount,
        //            ItemName = item.ItemName,
        //            ItemPrice = price
        //        });

        //    }

        //    foreach (var item in IncrementProcessList)//打包服务
        //    {
        //        if (item.SelectId <= 0 || string.IsNullOrEmpty(item.SelectUserId) || item.ItemCount <= 0)
        //        {
        //            new TipsWindow($"数据输入有误").Show();
        //            return;
        //        }
        //        if (item.ItemCount > TaskCount)
        //        {
        //            new TipsWindow($"{item.ItemName}:{item.ItemCount}超出任务量{TaskCount}").Show();
        //            return;
        //        }
        //        var member = MemberList.SingleOrDefault(m => m.Id == item.SelectUserId);
        //        if (member != null && !packUsers.Contains(member.UserName))
        //        {
        //            packUsers.Add(member.UserName);
        //        }


        //        price = PackServiceList.First(i => i.Id == item.SelectId).Price;
        //        singleFees += price;
        //        AllFees += item.ItemCount * price;
        //        PackFees += item.ItemCount * price;
        //        if (PackServiceMembers.Select(a => a.PackServiceId).Contains(item.SelectId))//存在累加
        //        {
        //            var inMembers = PackServiceMembers.SingleOrDefault(a => a.UserId == item.SelectUserId && a.PackServiceId == item.SelectId);
        //            if (inMembers != null)
        //                inMembers.PackServiceCount += item.ItemCount;


        //            var data = PackServiceMembers.SingleOrDefault(a => a.PackServiceId == item.SelectId);
        //            var feeItem = feesItem.ServiceList.SingleOrDefault(f => f.ItemName == item.ItemName);
        //            feeItem.ItemCount += item.ItemCount;
        //            data.PackServiceCount += item.ItemCount;
        //            if (data.PackServiceCount > TaskCount)//累积超出任务量
        //            {
        //                new TipsWindow($"{item.ItemName}:{data.PackServiceCount}超出任务量{TaskCount}").Show();
        //                return;
        //            }
        //            continue;
        //        }
        //        PackServiceMembers.Add(new PackServiceMemberModel
        //        {
        //            UserId = item.SelectUserId,
        //            PackServiceCount = item.ItemCount,
        //            PackServiceId = item.SelectId,
        //            Price = price,
        //            ServiceType = ServiceType.打包服务
        //        });
        //        feesItem.ServiceList.Add(new ServiceItemResponse
        //        {
        //            ServiceType = ServiceType.打包服务,
        //            ItemCount = item.ItemCount,
        //            ItemName = item.ItemName,
        //            ItemPrice = price
        //        });



        //    }

        //    foreach (var item in ConsumableServiceList)
        //    {
        //        if (item.SelectId <= 0 || item.ItemCount <= 0)
        //        {
        //            new TipsWindow($"数据输入有误").Show();
        //            return;
        //        }
        //        if (item.ItemCount > TaskCount)
        //        {
        //            new TipsWindow($"{item.ItemName}:{item.ItemCount}超出任务量{TaskCount}").Show();
        //            return;
        //        }
        //        price = ConsumableList.First(i => i.Id == item.SelectId).Price.Value;
        //        singleFees += price;
        //        AllFees += item.ItemCount * price;
        //        ConsumableFees += item.ItemCount * price;
        //        if (allConsumableTasks.Select(a => a.ConsumableId).Contains(item.SelectId))//存在累加
        //        {
        //            var data = allConsumableTasks.SingleOrDefault(a => a.ConsumableId == item.SelectId);
        //            var feeItem = feesItem.ServiceList.SingleOrDefault(f => f.ItemName == item.ItemName);
        //            feeItem.ItemCount += item.ItemCount;
        //            data.ConsumableCount += item.ItemCount;
        //            if (data.ConsumableCount > TaskCount)//累积超出任务量
        //            {
        //                new TipsWindow($"{item.ItemName}:{data.ConsumableCount}超出任务量{TaskCount}").Show();
        //                return;
        //            }
        //            continue;
        //        }
        //        feesItem.ServiceList.Add(new ServiceItemResponse
        //        {
        //            ServiceType = ServiceType.耗材服务,
        //            ItemCount = item.ItemCount,
        //            ItemName = item.ItemName,
        //            ItemPrice = price
        //        });
        //        allConsumableTasks.Add(new ConsumableTaskModel
        //        {
        //            ConsumableCount = item.ItemCount,
        //            ConsumableId = item.SelectId
        //        });
        //    }
        //    uploadService.ConsumableIds = string.Join(",", allConsumableTasks.Select(a => a.ConsumableId));
        //    uploadService.ConsumableNos = string.Join(",", allConsumableTasks.Select(a => a.ConsumableCount));
        //    uploadService.WorkProcessIds = string.Join(",", PackServiceMembers.Where(p => p.ServiceType == ServiceType.打包服务).Select(a => a.PackServiceId));
        //    uploadService.WorkProcessNos = string.Join(",", PackServiceMembers.Where(p => p.ServiceType == ServiceType.打包服务).Select(a => a.PackServiceCount));
        //    uploadService.IncreateServiceIds = string.Join(",", PackServiceMembers.Where(p => p.ServiceType == ServiceType.增值服务).Select(a => a.PackServiceId));
        //    uploadService.IncreateServiceNos = string.Join(",", PackServiceMembers.Where(p => p.ServiceType == ServiceType.增值服务).Select(a => a.PackServiceCount));

        //    uploadService.PackServiceIds = string.Join(",", PackServiceMembers.Select(a => a.PackServiceId));
        //    uploadService.PackServiceNos = string.Join(",", PackServiceMembers.Select(a => a.PackServiceCount));
        //    //var orgIds = LoadList.Select(p => p.SelectId).ToList();
        //    //var nowIds = PackServiceMembers.Select(p => p.PackServiceId).ToList();

        //    //var add =  nowIds.Except(orgIds);

        //    foreach (var item in LoadList)
        //    {
        //        if (!PackServiceMembers.Any(p => p.UserId == item.SelectUserId && p.PackServiceId == item.SelectId))
        //        {
        //            delDatas.Add(new PersonTaskModel
        //            {

        //                TaskId = taskId,
        //                PackUserId = item.SelectUserId,
        //                ServiceId = item.SelectId
        //            });
        //        }
        //    }


        //    //var del = orgIds.Except(nowIds).ToList();

        //    foreach (var PackServiceMember in PackServiceMembers)
        //    {
        //        addDatas.Add(new PersonTaskModel
        //        {
        //            TaskId = taskId,
        //            CreateTime = DateTime.Now,
        //            IsDeleted = false,
        //            ServiceCount = PackServiceMember.PackServiceCount,
        //            PackUserId = PackServiceMember.UserId,
        //            ServiceId = PackServiceMember.PackServiceId,
        //            ServiceType = PackServiceMember.ServiceType
        //        });
        //    }
        //    uploadService.AddPackServices = addDatas;
        //    uploadService.DelPackServices = delDatas;
        //    //uploadService.DeletedPackServices = del;

        //    //uploadService.DeletedPackServices
        //    uploadService.SkuId = SkuId;
        //    uploadService.OrderId = OrderId;
        //    uploadService.AllFees = Convert.ToDecimal(AllFees.ToString("0.00"));
        //    uploadService.SingleFees = singleFees;
        //    uploadService.IncreaseFees = Convert.ToDecimal((IncreateFees).ToString("0.00"));
        //    uploadService.PackFees = Convert.ToDecimal((PackFees).ToString("0.00"));
        //    uploadService.ConsumableFees = Convert.ToDecimal((ConsumableFees).ToString("0.00"));
        //    uploadService.DiscountPrice = Convert.ToDecimal((AllFees * upDisCount).ToString("0.00"));
        //    var res = packDetailService.SetPackTaskDetail(uploadService);
        //    if (res != null && res.Success)
        //    {
        //        // new TipsWindow("上传成功!").Show();
        //        var win = obj as System.Windows.Window;
        //        feesItem.AllFees = AllFees;
        //        feesItem.SingleFees = singleFees;
        //        feesItem.TaskId = TaskId;
        //        feesItem.DisCount = upDisCount;
        //        feesItem.DiscountAllFees = upDisCount * AllFees;
        //        feesItem.DiscountSingleFees = singleFees * upDisCount;
        //        if (SetAllFees != null)
        //            SetAllFees(feesItem, packUsers);
        //        win.Close();
        //    }
        //}


        /// <summary>
        /// 更新 打包员 和费用数据
        /// </summary>
        public Action SetAllFees { get; set; }

        private void AddPackService()
        {
            App.Current.Dispatcher.Invoke(new Action(() =>
            {
                IncrementProcessList.Add(new PackItemModel()
                {
                    ItemCount = TaskCount,
                    MemberList = MemberList,
                    PackServiceList = PackServiceList,
                });
            }));

        }


        private void AddBasicPackService()
        {
            App.Current.Dispatcher.Invoke(new Action(() =>
            {
                BasicPackProcessList.Add(new PackItemModel()
                {
                    ItemCount = TaskCount,
                    MemberList = MemberList,
                    PackServiceList = PackServiceList
                });
            }));

        }

        private void AddIncreateService()
        {
            App.Current.Dispatcher.Invoke(new Action(() =>
            {
                IncreateList.Add(new PackItemModel()
                {
                    ItemCount = TaskCount,
                    IncreateServiceList = IncreateServiceList,
                    MemberList = MemberList,
                });
            }));


        }

        private void AddConsumable()
        {
            App.Current.Dispatcher.Invoke(new Action(() =>
            {
                ConsumableServiceList.Add(new PackItemModel()
                {
                    ItemCount = TaskCount,
                    ConsumableList = ConsumableList
                });
            }));

        }
    }
}