using BBWY.Client.APIServices;
using BBWY.Client.Models.APIModel.Response.PackTask;
using BBWY.Client.ViewModels;
using BBWY.Client.ViewModels.PackTask;
using BBWY.Client.Views.PackTask;
using BBWY.Client.Views.QualityTask;
using GalaSoft.MvvmLight.Command;
using System;
using System.Collections.Generic;

using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace BBWY.Client.Models
{
    /// <summary>
    /// 打包任务  数据绑定
    /// </summary>
    public class PackTaskModel : BaseVM
    {

        private bool isShowFees;
        public bool IsShowFees { get => isShowFees; set { Set(ref isShowFees, value); } }

        private long id;

        public long Id { get => id; set { Set(ref id, value); } }
       
        
        public ICommand PrintBarcodeCommand { get; set; }

        public ICommand PrintCerCommand { get; set; }
        public ICommand LookCerCommand { get; set; }
        public ICommand LookBarCommand { get; set; }
        public ICommand SetServiceCommand { get; set; }
        /// <summary>
        /// 修改任务
        /// </summary>
        public ICommand UpdateTaskCommand { get; set; }

        public ICommand QualityTaskCommand { get; set; }



        public Action ReflashTask { get; set; }

       

        private void UpdateTask()
        {

            ViewModelLocator viewModel = new ViewModelLocator();
            var publicTaskViewModel = viewModel.PublishTask;

            if (publicTaskViewModel.ReflashWindow == null)
                publicTaskViewModel.ReflashWindow = ReflashTask;

            publicTaskViewModel.InitData(this);
            PublishTaskWindow publish = new PublishTaskWindow();
            publish.Show();

            //CreatePackTask create = new CreatePackTask();

            //ViewModelLocator viewModel = new ViewModelLocator();
            //var createViewModel = viewModel.CreateTaskView;
            //if (createViewModel.ReflashWindow == null)
            //{
            //    createViewModel.ReflashWindow = ReflashTask;
            //}
            //create.SendData(this);//初始化数据
            //create.ShowDialog();


        }



        public PackTaskModel()
        {
            PrintBarcodeCommand = new RelayCommand(PrintBarcode);
            PrintCerCommand = new RelayCommand(PrintCer);
            LookBarCommand = new RelayCommand(LookBar);
            LookCerCommand = new RelayCommand(LookCer);
            SetServiceCommand = new RelayCommand(SetService);
            UpdateTaskCommand = new RelayCommand(UpdateTask);
            QualityTaskCommand=new RelayCommand(QualityTask);
        }

        private void QualityTask()
        {
            QualityWindow service = new QualityWindow();
            //加载数据
            ViewModelLocator viewModelLocator = new ViewModelLocator();
            var qualityViewModel = viewModelLocator.QualityTask;

            if (qualityViewModel.ReflashWindow == null)
                qualityViewModel.ReflashWindow = ReflashTask;
            //qualityViewModel.TaskCount = SkuCount;
            // qualityViewModel.TaskId = TaskId;
            qualityViewModel.OrderId = OrderId;
            qualityViewModel.SkuId = SkuId;
            qualityViewModel.SearchSku(this);
            //qualityViewModel.LoadPackDatas();
            //qualityViewModel.SetAllFees = new Action<FeesItemResponse, List<string>>((feesItem, packUsers) =>
            //{
            //    FeesItemResponse = feesItem;
            //    PackUser = string.Join("\r\n", packUsers);
            //    FeesItemResponse.DiscountAllFees = feesItem.disCount * feesItem.AllFees;
            //    IsShowFees = feesItem.AllFees > 0 ? true : false;
            //});
            service.Show();
        }

        private void SetService()
        {
            ServiceWindow service = new ServiceWindow();
            //加载数据
            ViewModelLocator viewModelLocator = (ViewModelLocator)App.Current.Resources["Locator"];
            var serviceViewModel = viewModelLocator.PackServiceList;

            serviceViewModel.PackTaskModel = this;
            serviceViewModel.PackTaskList = new System.Collections.ObjectModel.ObservableCollection<PackTaskModel> { this};

            serviceViewModel.TaskCount = SkuCount;
            serviceViewModel.TaskId = TaskId;
            serviceViewModel.OrderId= OrderId;
            serviceViewModel.SkuId =SkuId ;
            serviceViewModel.PackUserName = this.PackUser?.Replace("\r\n",",")?.Replace("\n", ",")?.Replace("\r", ",");
            serviceViewModel.LoadPackDatas();

           
            serviceViewModel.SetAllFees = new Action(() =>
             {

                 if (ReflashTask != null) ReflashTask();
             });
            service.Show();
        }

        /// <summary>
        /// 查看合格证
        /// </summary>
        private void LookCer()
        {
            if (CertificateModel == null)
            {
                new TipsWindow("该任务无设置合格证信息,无法查看!").ShowDialog();
                return;
            }
            LookCerWindow lookCerWindow = new LookCerWindow(CertificateModel);
            lookCerWindow.Show();
        }



        /// <summary>
        /// 查看条形码
        /// </summary>
        private void LookBar()
        {
            if (BarCodeModel == null)
            {
                new TipsWindow("该任务无设置条形码信息,无法查看!").ShowDialog();
                return;
            }
            LookBarCodeWindow look = new LookBarCodeWindow();
            look.SetData(new BarCodeModel
            {
                Brand = BarCodeModel.Brand,
                BrandName = BarCodeModel.BrandName,
                LabelModel = BarCodeModel.LabelModel,
                ProductNo = BarCodeModel.ProductNo,
                SkuId = BarCodeModel.SkuId,
                SkuName = BarCodeModel.SkuName
            });
            look.Show();
        }

        private void PrintCer()
        {
            if (CertificateModel == null)
            {
                new TipsWindow("该任务无设置合格证信息,无法打印!").Show();
                return;
            }
            PrintWindow printWindow = new PrintWindow();
            
            printWindow.CertificateModel = certificateModel;
            printWindow.LoadData();
            //printWindow.Datas = LoadCerLabelModels();
            printWindow.Show();
        }

        /// <summary>
        /// 打印条形码
        /// </summary>
        private void PrintBarcode()
        {
            if (BarCodeModel == null)
            {
                new TipsWindow("该任务无设置条形码信息,无法打印!").Show();
                return;
            }

            PrintWindow printWindow = new PrintWindow();       
            printWindow.BarCodeModel = new BarCodeModel
            {
                Brand = BarCodeModel.Brand,
                BrandName = BarCodeModel.BrandName,
                LabelModel = BarCodeModel.LabelModel,
                ProductNo = BarCodeModel.ProductNo,
                SkuId = BarCodeModel.SkuId,
                SkuName = BarCodeModel.SkuName
            };
            printWindow.LoadData();
            //printWindow.Datas = LoadBarLabelModels();
            printWindow.Show();
        }
        
        /*
       public Dictionary<string, string> LoadBarLabelModels()
       {
           Dictionary<string, string> data = new Dictionary<string, string>();
           data.Add("pinming", $"品名: {BarCodeModel.BrandName}");
           data.Add("guige", $"规格: {BarCodeModel.SkuName}");
           data.Add("pop", $"POP{BarCodeModel.SkuId}");
           switch (BarCodeModel.LabelModel)
           {
               case BarcodeLabelModel.barstander:
                   data.Add("pinpai", $"品牌: {BarCodeModel.Brand}");
                   data.Add("xinghao", $"型号: {BarCodeModel.ProductNo}");
                   return data;
               case BarcodeLabelModel.barsimplify:
                   return data;
               default:
                   break;
           }
           return data;
       }

       public Dictionary<string, string> LoadCerLabelModels()
       {
           Dictionary<string, string> data = new Dictionary<string, string>();
           data.Add("pinming", $"品名: {CertificateModel.BrandName}");
           data.Add("pinpai", $"品牌: {CertificateModel.Brand}");
           data.Add("xinghao", $"型号: {CertificateModel.ProductNo}");
           data.Add("dizhi", $"地址: {CertificateModel.ProductAdress}");
           data.Add("caizhi", $"材质: {CertificateModel.Shader}");
           data.Add("changshang", $"生产商: {CertificateModel.ProductShop}");


           switch (CertificateModel.IsLogo)
           {
               case 0://无图   
                   data.Add("gongchangid", $"无");
                   break;
               case 1://有图
                   data.Add("gongchangid", $"{CertificateModel.FactoryNumber}");
                   break;
               default:
                   break;
           }

           string[] excutes = CertificateModel.ExcuteStander.Split(',', StringSplitOptions.RemoveEmptyEntries);
           StringBuilder sb = new StringBuilder();
           sb.Append("执行标准: ");
           for (int i = 0; i < excutes.Count(); i++)
           {
               if (i % 2 == 0 && i > 0)//间隔两个换行
               {
                   sb.Append("\r\n").Append("               ");
               }
               sb.Append(excutes[i]).Append("   ");
           }
           sb.Remove(sb.Length - 3, 3);


           data.Add("biaozhun", sb.ToString());



           return data;
       }
       */

        private DateTime endTime;
        /// <summary>
        /// 提交时间
        /// </summary>
        public DateTime EndTime { get => endTime; set { Set(ref endTime, value); } }


        private long taskId;
        /// <summary>
        /// 任务id
        /// </summary>
        public long TaskId { get => taskId; set { Set(ref taskId, value); } }


        private string departmentName;
        /// <summary>
        /// 部门名称
        /// </summary>
        public string DepartmentName { get => departmentName; set { Set(ref departmentName, value); } }


        private string acceptName;
        /// <summary>
        /// 对接人
        /// </summary>
        public string AcceptName { get => acceptName; set { Set(ref acceptName, value); } }


        private int skuCount;
        /// <summary>
        /// sku数量
        /// </summary>
        public int SkuCount { get => skuCount; set { Set(ref skuCount, value); } }


        private TaskState availability;
        /// <summary>
        /// 到货情况(待收货=0,部分收货=1,已到货=2)
        /// </summary>
        public TaskState Availability { get => availability; set { Set(ref availability, value); } }


        private Worry isWorry;
        /// <summary>
        /// 是否加急
        /// </summary>
        public Worry IsWorry { get => isWorry; set { Set(ref isWorry, value); } }


        private TaskStateType taskStatus;
        /// <summary>
        /// 任务状态(未完成=0,已完成=1)
        /// </summary>
        public TaskStateType TaskStatus { get => taskStatus; set { Set(ref taskStatus, value); } }


        private PackTaskState taskState;
        /// <summary>
        /// 打包仓库任务状态
        /// </summary>
        public PackTaskState TaskState { get => taskState; set { Set(ref taskState, value); } }


        private PackType packType;
        /// <summary>
        /// 打包类型(单件=0,多件=1)
        /// </summary>
        public PackType PackType { get => packType; set { Set(ref packType, value); } }


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


        private string skuTitle;
        /// <summary>
        /// sku配件商品名称
        /// </summary>
        public string SkuTitle { get => skuTitle; set { Set(ref skuTitle, value); } }


        private BasicPack basicPack;
        /// <summary>
        /// 基础包装(快递袋=0,纸箱=1,麻袋=2)
        /// </summary>
        public BasicPack BasicPack { get => basicPack; set { Set(ref basicPack, value); } }



        private string increment1;
        /// <summary>
        /// 增量1()
        /// </summary>
        public string Increment1 { get => increment1; set { Set(ref increment1, value); } }


        private Increment increment2;
        /// <summary>
        /// 增量2()
        /// </summary>
        public Increment Increment2 { get => increment2; set { Set(ref increment2, value); } }


        private string positionType;
        /// <summary>
        /// 落仓(本地仓=0,云仓=1,京仓=2)
        /// </summary>
        public string PositionType { get => positionType; set { Set(ref positionType, value); } }




        #region 条形码数据
        /// <summary>
        /// 条形码id
        /// </summary>
        public long BarCodeId { get; set; }

        /// <summary>
        /// 标签模板
        /// </summary>
        public BarcodeLabelModel LabelModel { get; set; }

        private string brand;
        /// <summary>
        /// 品牌
        /// </summary>
        public string Brand { get => brand; set { Set(ref brand, value); } }

        private string brandName;
        /// <summary>
        /// 品名
        /// </summary>
        public string BrandName { get => brandName; set { Set(ref brandName, value); } }


        private string producNo;
        /// <summary>
        /// 货号
        /// </summary>
        public string ProductNo { get => producNo; set { Set(ref producNo, value); } }

        private string skuName;
        /// <summary>
        /// sku名称
        /// </summary>
        public string SkuName { get => skuName; set { Set(ref skuName, value); } }


        private string skuId;
        /// <summary>
        /// skuId(条形码号=POP+SkuId)
        /// </summary>
        public string SkuId { get => skuId; set { Set(ref skuId, value); } }


        private string modelNo;
        /// <summary>
        /// 型号
        /// </summary>
        public string ModelNo { get => modelNo; set { Set(ref modelNo, value); } }
        #endregion


        private BarCodeModel barCodeModel;
        /// <summary>
        /// 合格证
        /// </summary>
        public BarCodeModel BarCodeModel { get => barCodeModel; set { Set(ref barCodeModel, value); } }

        private CertificateModel[] certificateModel;
        /// <summary>
        /// 合格证
        /// </summary>
        public CertificateModel[] CertificateModel { get => certificateModel; set { Set(ref certificateModel, value); } }

        /// <summary>
        /// 合格证位置(外部包装=0,产品包装=1)
        /// </summary>
        private CertificatePosition certificatePosition;
        /// <summary>
        /// 合格证位置(外部包装=0,产品包装=1)
        /// </summary>
        public CertificatePosition CertificatePosition { get => certificatePosition; set { Set(ref certificatePosition, value); } }

        /// <summary>
        /// 注意事项(对接备注)
        /// </summary>
        private string markMessage;
        /// <summary>
        /// 注意事项(对接备注)
        /// </summary>
        public string MarkMessage { get => markMessage; set { Set(ref markMessage, value); } }

        /// <summary>
        /// 服务收费  (单个任务id 消耗的总费用)
        /// </summary>
        private decimal feesMoney;
        /// <summary>
        /// 服务收费  (单个任务id 消耗的总费用)
        /// </summary>
        public decimal FeesMoney { get => feesMoney; set { Set(ref feesMoney, value); } }

        /// <summary>
        /// 打包员
        /// </summary>
        private string packUser;
        /// <summary>
        /// 打包员
        /// </summary>
        public string PackUser { get => packUser; set { Set(ref packUser, value); } }

        //public FeesItemTypeDTO FeesItemTypeDTO { get; set; }


        private FeesItemResponse feesItemResponse;

        public FeesItemResponse FeesItemResponse { get => feesItemResponse; set { Set(ref feesItemResponse, value); } }

        public IList<SkuMessage> ItemList { get; set; }

        public string OrderId { get; set; }
    }

    public class SkuMessage : NotifyObject
    {
        private string id;

        public string Id { get => id; set { Set(ref id, value); } }

        /// <summary>
        /// 店铺Sku图链接
        /// </summary>
        private string logo;
        /// <summary>
        /// 店铺Sku图链接
        /// </summary>
        public string Logo { get => logo; set { Set(ref logo, value); } }

        /// <summary>
        /// 采购Sku名称
        /// </summary>
        private string skuName;
        /// <summary>
        /// 采购Sku名称
        /// </summary>
        public string SkuName { get => skuName; set { Set(ref skuName, value); } }

        /// <summary>
        /// 货号品名(手写上传)
        /// </summary>
        private string brandName;
        /// <summary>
        /// 货号品名(手写上传)
        /// </summary>
        public string BrandName { get => brandName; set { Set(ref brandName, value); } }

        /// <summary>
        /// 需求方店铺id
        /// </summary>
        private string shopName;
        /// <summary>
        /// 需求方店铺id
        /// </summary>
        public string ShopName { get => shopName; set { Set(ref shopName, value); } }


        /// <summary>
        /// 货号
        /// </summary>
        private string goodsNo;
        /// <summary>
        /// 货号
        /// </summary>
        public string GoodsNo { get => goodsNo; set { Set(ref goodsNo, value); } }
    }
}