using BBWY.Client.APIServices;
using BBWY.Client.Models;
using GalaSoft.MvvmLight.Command;
using HandyControl.Controls;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows.Input;

namespace BBWY.Client.ViewModels
{
    public class EditServiceOrderViewModel : BaseVM
    {

        private ServiceOrderService serviceOrderService;
        /// <summary>
        /// 主键Id
        /// </summary>
        private long servicePId;
        private string orderId;
        private ServiceResult? serviceResult;
        private decimal? sdRefundFreight;
        private ReturnDirection? returnDirection;
        private string renewalOrderId;
        private decimal? reissueAfterSaleAmount;
        private string returnCheckRemark;
        private StorageType? renewalType;
        private string renewalPurchaseOrderId;
        private Platform? renewalPurchasePlatform;
        private decimal? reissueFreight;
        private decimal? reissueProductAmount;
        private bool isLoading;

        public IList<StorageType> RenewalTypeList { get; set; }
        public ServiceResult? ServiceResult { get => serviceResult; set { Set(ref serviceResult, value); } }
        public decimal? SDRefundFreight { get => sdRefundFreight; set { Set(ref sdRefundFreight, value); } }
        public ReturnDirection? ReturnDirection { get => returnDirection; set { Set(ref returnDirection, value); } }
        public string RenewalOrderId { get => renewalOrderId; set { Set(ref renewalOrderId, value); } }

        /// <summary>
        /// 售后补发成本
        /// </summary>
        public decimal? ReissueAfterSaleAmount { get => reissueAfterSaleAmount; set { Set(ref reissueAfterSaleAmount, value); } }

        /// <summary>
        /// 退货检查备注
        /// </summary>
        public string ReturnCheckRemark { get => returnCheckRemark; set { Set(ref returnCheckRemark, value); } }

        public StorageType? RenewalType { get => renewalType; set { Set(ref renewalType, value); } }

        public string RenewalPurchaseOrderId { get => renewalPurchaseOrderId; set { Set(ref renewalPurchaseOrderId, value); } }

        public Platform? RenewalPurchasePlatform { get => renewalPurchasePlatform; set { Set(ref renewalPurchasePlatform, value); } }

        public ICommand SaveCommand { get; set; }

        public decimal? ReissueFreight { get => reissueFreight; set { Set(ref reissueFreight, value); } }

        public decimal? ReissueProductAmount { get => reissueProductAmount; set { Set(ref reissueProductAmount, value); } }

        public bool IsLoading { get => isLoading; set { Set(ref isLoading, value); } }

        public EditServiceOrderViewModel(ServiceOrderService serviceOrderService)
        {
            this.serviceOrderService = serviceOrderService;
            SaveCommand = new RelayCommand(Save);
            RenewalTypeList = new List<StorageType>() { StorageType.本地自发, StorageType.代发 };
        }

        public void SetData(ServiceOrder serviceOrder)
        {
            this.servicePId = serviceOrder.Id;
            this.orderId = serviceOrder.OrderId;
            this.ServiceResult = serviceOrder.ServiceResult;
            this.SDRefundFreight = serviceOrder.SDRefundFreight;
            this.ReturnDirection = serviceOrder.ReturnDirection;
            this.RenewalOrderId = serviceOrder.RenewalOrderId;
            this.ReissueAfterSaleAmount = serviceOrder.ReissueAfterSaleAmount;
            this.ReturnCheckRemark = serviceOrder.ReturnCheckRemark;
            this.RenewalType = serviceOrder.RenewalType;
            this.RenewalPurchaseOrderId = serviceOrder.RenewalPurchaseOrderId;
            this.RenewalPurchasePlatform = serviceOrder.RenewalPurchasePlatform;
            this.ReissueFreight = serviceOrder.ReissueFreight;
            this.ReissueProductAmount = serviceOrder.ReissueProductAmount;
        }

        private void Save()
        {
            if (IsLoading)
                return;
            IsLoading = true;
            Task.Factory.StartNew(() => serviceOrderService.EditServiceOrder(servicePId,
                                                                             orderId,
                                                                             ServiceResult,
                                                                             SDRefundFreight,
                                                                             ReturnDirection,
                                                                             RenewalOrderId,
                                                                             ReissueAfterSaleAmount,
                                                                             ReturnCheckRemark,
                                                                             RenewalType,
                                                                             RenewalPurchaseOrderId,
                                                                             RenewalPurchasePlatform,
                                                                             ReissueFreight,
                                                                             ReissueProductAmount)).ContinueWith(t =>
            {
                IsLoading = false;
                var r = t.Result;
                if (!r.Success)
                {
                    App.Current.Dispatcher.Invoke(() => MessageBox.Show(r.Msg, "提示"));
                    return;
                }
                //closeEditServiceOrder
                GalaSoft.MvvmLight.Messaging.Messenger.Default.Send(true, "closeEditServiceOrder");
            });
        }
    }
}