using BBWY.Client.APIServices;
using BBWY.Client.Models;
using BBWY.Client.Views.Purchase;
using BBWY.Common.Models;
using GalaSoft.MvvmLight.Command;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;

namespace BBWY.Client.ViewModels
{
    public class ChoosePurchaseSchemeViewModel : BaseVM, IDenpendency
    {
        private PurchaseService purchaseService;
        private GlobalContext globalContext;
        private Order order;
        private bool noPurchaser;

        public IList<Purchaser> PurchaserList { get; set; }
        public bool NoPurchaser { get => noPurchaser; set { Set(ref noPurchaser, value); } }

        //public ICommand DeleteCommand { get; set; }
        //public ICommand EditCommand { get; set; }
        public ICommand PreviewPurchaseCommand { get; set; }



        public ChoosePurchaseSchemeViewModel(PurchaseService purchaseService, GlobalContext globalContext)
        {
            this.purchaseService = purchaseService;
            this.globalContext = globalContext;
            this.PurchaserList = new ObservableCollection<Purchaser>();
            //DeleteCommand = new RelayCommand<PurchaseScheme>(Delete);
            //EditCommand = new RelayCommand<PurchaseScheme>(Edit);
            PreviewPurchaseCommand = new RelayCommand<Purchaser>(PreviewPurchase);
        }

        protected override void Load()
        {
            PurchaserList.Clear();
            Task.Factory.StartNew(() => LoadPurchaser());
        }

        protected override void Unload()
        {
            this.order = null;
            this.NoPurchaser = false;
            PurchaserList.Clear();
        }

        public void SetData(Order order)
        {
            this.order = order;
        }

        public void LoadPurchaser()
        {
            var skuIdList = order.ItemList.Select(osku => osku.Id).ToList();
            var purchaserResponse = purchaseService.GetSharePurchaser(skuIdList, globalContext.User.Shop.ShopId);
            if (!purchaserResponse.Success)
            {
                App.Current.Dispatcher.Invoke(() => MessageBox.Show(purchaserResponse.Msg, "获取采购商"));
                return;
            }
            NoPurchaser = (purchaserResponse.Data?.Count() ?? 0) == 0;
            if (purchaserResponse.Data != null && purchaserResponse.Data.Count() > 0)
            {
                App.Current.Dispatcher.Invoke(() =>
                {
                    foreach (var p in purchaserResponse.Data) PurchaserList.Add(p);
                });
            }

        }

        //public void Delete(PurchaseScheme purchaseScheme)
        //{
        //    Task.Factory.StartNew(() => purchaseService.DeletePurchaseScheme(purchaseScheme.Id)).ContinueWith(r =>
        //    {
        //        var response = r.Result;
        //        if (response.Success)
        //            App.Current.Dispatcher.Invoke(() => PurchaseSchemeList.Remove(purchaseScheme));
        //        else
        //            App.Current.Dispatcher.Invoke(() => MessageBox.Show(response.Msg, "删除采购方案"));
        //    });
        //}

        //public void Edit(PurchaseScheme purchaseScheme)
        //{
        //    var skuList = new List<ProductSku>()
        //    {
        //         new ProductSku(){ Id=purchaseScheme.SkuId,ProductId=purchaseScheme.ProductId, Title=SkuName}
        //    };
        //    bindingPurchaseProduct.SetData(skuList, purchaseScheme.PurchaserId, purchaseScheme.PurchaserName);
        //    var bindingView = new Views.Ware.BindingPurchaseProduct();
        //    var r = bindingView.ShowDialog();
        //    if (r == true)
        //        Task.Factory.StartNew(() => LoadPurchaseScheme(SkuId));
        //}

        public void PreviewPurchase(Purchaser purchaser)
        {
            var count = globalContext.User.Shop.PurchaseAccountList == null ? 0 : globalContext.User.Shop.PurchaseAccountList.Count();
            if (count > 1)
            {
                //选择采购账号
            }
            else if (count == 1)
            {
                var p = new _1688Purchase(order, purchaser, globalContext.User.Shop.PurchaseAccountList[0]);
                p.ShowDialog();
                GalaSoft.MvvmLight.Messaging.Messenger.Default.Send<object>(null, "ChoosePurchaseScheme_Close");
            }
            else
            {
                MessageBox.Show("缺少采购账号", "提示");
                return;
            }
        }
    }
}