using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Business;
using SlnMesnac.Model.domain;
using SlnMesnac.Model.dto;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本：4.0.30319.42000
* 机器名称：LAPTOP-E0N2L34V
* 命名空间：SlnMesnac.WPF.ViewModel
* 唯一标识：14008fcc-0a31-4f1e-bc80-9f9ea84d3de5
*
* 创建者：WenJY
* 电子邮箱：wenjy@mesnac.com
* 创建时间：2024-04-10 16:18:57
* 版本：V1.0.0
* 描述：
*
*--------------------------------------------------------------------
* 修改人：
* 时间：
* 修改说明：
*
* 版本：V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.WPF.ViewModel
{
    /// <summary>
    /// 生产统计ViewModel
    /// </summary>
    internal class ProdStatisticsViewModel : ViewModelBase
    {
        private readonly PalletStowBusiness _palletStowBusiness;
        private readonly ProdCompletionBusiness _prodCompletionBusiness;
        public ProdStatisticsViewModel()
        {
            _palletStowBusiness = App.ServiceProvider.GetService<PalletStowBusiness>();
            _prodCompletionBusiness = App.ServiceProvider.GetService<ProdCompletionBusiness>();

            DeletePalletCommand = new RelayCommand<string>(DeletePallet);

            DeleteBarCodeCommand = new RelayCommand<string> (DeleteBarCode);

            var palletTask = App.ServiceProvider.GetService<List<RealPalletTask>>();

            RefreshPalletTaskDataGrid(palletTask);

            _palletStowBusiness.RefreshPalletTaskListEvent += RefreshPalletTaskDataGrid;

            var barCodeTasks = App.ServiceProvider.GetService<List<RealBarCodeTask>>();
            RefreshBarCodeTaskDataGrid(barCodeTasks);

            _prodCompletionBusiness.RefreshBarCodeTaskListEvent += RefreshBarCodeTaskDataGrid;
        }

        #region 参数定义
        /// <summary>
        /// 托盘队列DataGrid
        /// </summary>
        private ObservableCollection<RealPalletTask> palletTaskDataGrid;

        public ObservableCollection<RealPalletTask> PalletTaskDataGrid
        {
            get { return palletTaskDataGrid; }
            set { palletTaskDataGrid = value; RaisePropertyChanged(() => PalletTaskDataGrid); }

        }

        /// <summary>
        /// 条码队列DataGrid
        /// </summary>
        private ObservableCollection<RealBarCodeTask> barCodeTaskDataGrid;

        public ObservableCollection<RealBarCodeTask> BarCodeTaskDataGrid
        {
            get { return barCodeTaskDataGrid; }
            set { barCodeTaskDataGrid = value; RaisePropertyChanged(() => BarCodeTaskDataGrid); }

        }
        #endregion

        #region 事件定义

        public RelayCommand<string> DeletePalletCommand { get;set; }

        public RelayCommand<string> DeleteBarCodeCommand { get; set; }

        #endregion

        /// <summary>
        /// 刷新托盘队列信息
        /// </summary>
        /// <param name="palletTasks"></param>
        private void RefreshPalletTaskDataGrid(List<RealPalletTask> palletTasks)
        {
            PalletTaskDataGrid = new ObservableCollection<RealPalletTask>();
            foreach (var task in palletTasks)
            {
                PalletTaskDataGrid.Add(task);
            }
        }

        /// <summary>
        /// 刷新条码队列信息
        /// </summary>
        /// <param name="barCodeTasks"></param>
        private void RefreshBarCodeTaskDataGrid(List<RealBarCodeTask> barCodeTasks)
        {
            BarCodeTaskDataGrid = new ObservableCollection<RealBarCodeTask>();
            foreach (var task in barCodeTasks)
            {
                BarCodeTaskDataGrid.Add(task);
            }
        }

        /// <summary>
        /// 移除托盘队列信息
        /// </summary>
        /// <param name="palletCode"></param>
        private void DeletePallet(string palletCode)
        {
            _palletStowBusiness.RemovePalletInfo(palletCode);
        }

        /// <summary>
        /// 移除小包条码队列信息
        /// </summary>
        /// <param name="barCode"></param>
        private void DeleteBarCode(string barCode)
        {
            _prodCompletionBusiness.RemoveBarCode(barCode);
        }
    }
}
