using BBWY.Client.APIServices;
using BBWY.Client.Models;
using BBWY.Client.Models.APIModel.Request;
using BBWY.Controls;
using NPOI.Util;
using Org.BouncyCastle.Asn1.Cmp;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Ocsp;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Runtime.ConstrainedExecution;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace BBWY.Client.Views.PackTask
{
    /// <summary>
    /// SetCerWindow.xaml 的交互逻辑
    /// </summary>
    public partial class SetCerWindow : BWindow
    {
        public SetCerWindow()
        {
            InitializeComponent();
        }

        public void LoadData(CertificateModel[] CertificateModel, PackTaskService packTaskService, CertificateModel SpuCertificateModel, bool IsSetSpuCertificate)
        {
            this.CertificateModel = CertificateModel.Copy();
            this.SpuCertificateModel = SpuCertificateModel.Copy();
            this.packTaskService = packTaskService;
            this.IsSetSpuCertificate = IsSetSpuCertificate;
            SetSpuCer.Content = IsSetSpuCertificate ? "设置spu模板" : "修改spu模板";
            GoodsNumberCerList = new ObservableCollection<GoodsNumberCer>();


            foreach (var item in CertificateModel)
            {
                GoodsNumberCerList.Add(new GoodsNumberCer
                {
                    CertificateModel = item.Copy(),
                });

            }
            this.DataContext = this;

        }
        public bool IsSetSpuCertificate { get; set; }
        public PackTaskService packTaskService { get; set; }
        public CertificateModel[] CertificateModel { get; set; }
        public CertificateModel SpuCertificateModel { get; set; }

        public Action<CertificateModel[]> SaveResult { get; set; }

        public ObservableCollection<GoodsNumberCer> GoodsNumberCerList { get; set; }

        private void save_btn_Click(object sender, RoutedEventArgs e)
        {

            foreach (var item in GoodsNumberCerList)
            {
                if (string.IsNullOrEmpty(item.CertificateModel.ExcuteStander)
                    || string.IsNullOrEmpty(item.CertificateModel.Shader) || string.IsNullOrEmpty(item.CertificateModel.BrandName)
                    || string.IsNullOrEmpty(item.CertificateModel.Brand) || string.IsNullOrEmpty(item.CertificateModel.ProductShop)
                    || string.IsNullOrEmpty(item.CertificateModel.ProductAdress))
                {
                    new TipsWindow("参数出错!请重新填写!").Show();
                    return;
                }


                if ((item.CertificateModel.LabelModel == CertificateLabelModel.标准无3c || item.CertificateModel.LabelModel == CertificateLabelModel.标准有3c) && string.IsNullOrEmpty(item.CertificateModel.ProductNo))
                {
                    MessageBox.Show("型号不能为空");
                    return;
                }
                if (item.CertificateModel.LabelModel == CertificateLabelModel.标准有3c && string.IsNullOrEmpty(item.CertificateModel.FactoryNumber))
                {
                    MessageBox.Show("工厂编号不能为空");
                    return;
                }
                if (item.CertificateModel.LabelModel == CertificateLabelModel.适用年龄 && string.IsNullOrEmpty(item.CertificateModel.ApplyAge))
                {
                    MessageBox.Show("适用年龄不能为空");
                    return;
                }



                var standers = item.CertificateModel.ExcuteStander.Split(',', StringSplitOptions.RemoveEmptyEntries);

                var resData = packTaskService.SaveCer(new CerRequest
                {
                    Brand = item.CertificateModel.Brand,
                    BrandName = item.CertificateModel.BrandName,
                    ProductNo = item.CertificateModel.ProductNo,
                    SkuId = item.CertificateModel.SkuId,
                    ExcuteStander = item.CertificateModel.ExcuteStander,
                    LabelModel = (int)item.CertificateModel.LabelModel,
                    FactoryNumber = item.CertificateModel.FactoryNumber,
                    IsLogo = item.CertificateModel.IsLogo,
                    ProductAdress = item.CertificateModel.ProductAdress,
                    ProductShop = item.CertificateModel.ProductShop,
                    Shader = item.CertificateModel.Shader,
                    ApplyAge = item.CertificateModel.ApplyAge,
                    GoodsNumber = item.CertificateModel.GoodsNumber,
                    ProduceDate = item.CertificateModel.ProduceDate,
                    SaveType = SaveType.C端, 
                     

                });
                if (resData == null)
                {
                    MessageBox.Show("网络异常!");
                    return;
                }


                if (!resData.Success)
                {
                    MessageBox.Show(resData.Msg);
                    return;
                }

                item.CertificateModel.Id = resData.Data;
                if (SaveResult != null) SaveResult(GoodsNumberCerList.Select(c => c.CertificateModel).ToArray());


            }
            this.Close();
        }

        private void SetSpuCer_Click(object sender, RoutedEventArgs e)
        {
            if (SpuCertificateModel == null)
            {
                SpuCertificateModel = new CertificateModel();
                SpuCertificateModel.ProductNo = CertificateModel[0].ProductNo;
                SpuCertificateModel.Brand = CertificateModel[0].Brand;
                SpuCertificateModel.SkuId = CertificateModel[0].SkuId;
            }
            SetSpuCerWindow setSpuCerWindow = new SetSpuCerWindow();
            setSpuCerWindow.LoadData(SpuCertificateModel, packTaskService);

            setSpuCerWindow.SaveResult = s =>
            {
                SpuCertificateModel = s;
                SetSpuCer.Content = "修改spu模板";//"设置spu模板" : "修改spu模板";
                IsSetSpuCertificate = false;
            };

            setSpuCerWindow.Show();
        }

        long selectCer = -1;//tabcontrol  选中事件
        private void InseartCer_Click(object sender, RoutedEventArgs e)
        {
            if (IsSetSpuCertificate)
            {
                new TipsWindow("无可用模板").Show();
                return;
            }
            if (selectCer < 0)
            {
                new TipsWindow("未选中合格证").Show();
                return;
            }
            var cer = GoodsNumberCerList.SingleOrDefault(g => g.CertificateModel.GoodsNumber == selectCer);
            cer.CertificateModel.Brand = SpuCertificateModel.Brand;
            cer.CertificateModel.BrandName = SpuCertificateModel.BrandName;
            cer.CertificateModel.ExcuteStander = SpuCertificateModel.ExcuteStander;
            cer.CertificateModel.FactoryNumber = SpuCertificateModel.FactoryNumber;
            cer.CertificateModel.IsLogo = SpuCertificateModel.IsLogo;
            cer.CertificateModel.LabelModel = SpuCertificateModel.LabelModel;
            cer.CertificateModel.ProductAdress = SpuCertificateModel.ProductAdress;
            cer.CertificateModel.ProductNo = SpuCertificateModel.ProductNo;
            cer.CertificateModel.Shader = SpuCertificateModel.Shader;
            cer.CertificateModel.ProductShop = SpuCertificateModel.ProductShop;
            cer.CertificateModel.ApplyAge = SpuCertificateModel.ApplyAge;
            cer.CertificateModel.ProduceDate = SpuCertificateModel.ProduceDate;

        }


        private void add_goodsnum_Click(object sender, RoutedEventArgs e)
        {
            int num = 0;
        p:
            num++;
            int goodsNumber = num;
            var gncer = GoodsNumberCerList.SingleOrDefault(g => g.CertificateModel.GoodsNumber == goodsNumber);
            if (gncer != null) goto p;
            GoodsNumberCerList.Add(new GoodsNumberCer
            {
                CertificateModel = new CertificateModel
                {
                    GoodsNumber = goodsNumber,
                    BrandName = CertificateModel[0].BrandName,
                    Brand = CertificateModel[0].Brand,
                    SkuId = CertificateModel[0].SkuId,
                    ProductNo = CertificateModel[0].ProductNo,
                    SpuId = CertificateModel[0].SkuId,

                }
            });
            tab.SelectedIndex = GoodsNumberCerList.Count - 1;
            this.UpdateLayout();
        }



        private void tab_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var test = sender as HandyControl.Controls.TabControl;
            if (test != null)
            {
                var select = test.SelectedItem as GoodsNumberCer;
                if (select != null)
                    selectCer = select.CertificateModel.GoodsNumber;
            }
        }
    }

    public class GoodsNumberCer
    {
        /// <summary>
        /// 配件序号
        /// </summary>
       // public int GoodsNumber { get; set; }
        public CertificateModel CertificateModel { get; set; }
    }
}