using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading;
using BPA.Message;
using BPA.Message.Enum;
using BPASmartClient.Helper;
using BPASmartClient.Model;
using Microsoft.Toolkit.Mvvm.ComponentModel;
using Microsoft.Toolkit.Mvvm.Input;
using Microsoft.Toolkit.Mvvm.Messaging;

namespace BPASmartClient.ViewModel
{
    public class OrderListDialogViewModel : ObservableObject
    {
        public static bool IsAutoClose = false;
        public OrderListDialogViewModel()
        {
            Init();
        }

        private void Init()
        {
            CloseButton();
            CancelButton();
            ConfirmButton();
            if (Json<KeepDataBase>.Data.orderLists.Count > 0)
            {
                ThreadManage.GetInstance().Start(new Action(() =>
                {
                    Thread.Sleep(10000);
                    if (!IsAutoClose) WeakReferenceMessenger.Default.Send("false", "Close");
                }), "延时退出");
            }
        }

        /// <summary>
        /// 关闭按钮
        /// </summary>
        private void CloseButton()
        {
            CloseCommand = new RelayCommand(() =>
            {
                Json<KeepDataBase>.Data.orderLists.Clear();
                WeakReferenceMessenger.Default.Send("false", "Close");
                Json<KeepDataBase>.Save();
            });
        }

        /// <summary>
        /// 取消按钮
        /// </summary>
        private void CancelButton()
        {
            CancelCommand = new RelayCommand(() =>
            {
                Json<KeepDataBase>.Data.orderLists.Clear();
                WeakReferenceMessenger.Default.Send("false", "Close");
                Json<KeepDataBase>.Save();
            });
        }

        /// <summary>
        /// 确定按钮
        /// </summary>
        private void ConfirmButton()
        {
            ConfirmCommand = new RelayCommand(() =>
            {
                Json<KeepDataBase>.Data.orderLists.Clear();
                //var res = orderStatusLists.Where(p => p.IsSelected == true).ToList();
                var res = orderStatusLists.Where(p => p.morkOrderPushes.Where(s => s.IsSelected == true).ToList().Count > 0).ToList();

                if (res != null)
                {
                    Json<KeepDataBase>.Data.orderLists.Clear();
                    foreach (var item in orderStatusLists)
                    {
                        ObservableCollection<MorkOrder> morkOrders = new ObservableCollection<MorkOrder>();
                        foreach (var mork in item.morkOrderPushes)
                        {
                            if (mork.IsSelected) morkOrders.Add(mork);
                        }
                        Json<KeepDataBase>.Data.orderLists.Add(new OrderData()
                        {
                            DeviceId = item.DeviceId,
                            IsAllSelect = item.IsAllSelect,
                            morkOrderPushes = morkOrders,
                        });
                    }
                }
                WeakReferenceMessenger.Default.Send("true", "Close");
            });
        }

        public RelayCommand CloseCommand { get; set; }

        public RelayCommand CancelCommand { get; set; }

        public RelayCommand ConfirmCommand { get; set; }

        public ObservableCollection<OrderData> orderStatusLists
        {
            get { return Json<KeepDataBase>.Data.orderLists; }
            set { Json<KeepDataBase>.Data.orderLists = value; }
        }
    }
}
