using Microsoft.Extensions.DependencyInjection;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本：4.0.30319.42000
* 机器名称：LAPTOP-E0N2L34V
* 命名空间：SlnMesnac.Repository.service.Impl
* 唯一标识：052967bb-62b3-4a80-b2b9-135493fa7a73
*
* 创建者：WenJY
* 电子邮箱：wenjy@mesnac.com
* 创建时间：2024-04-10 16:46:27
* 版本：V1.0.0
* 描述：
*
*--------------------------------------------------------------------
* 修改人：
* 时间：
* 修改说明：
*
* 版本：V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Repository.service.Impl
{
    public class MesPrdBarCodeServiceImpl : BaseServiceImpl<MesPrdBarcodeInfo>, IMesPrdBarCodeService
    {
        private IServiceProvider _serviceProvider;
        public MesPrdBarCodeServiceImpl(Repository<MesPrdBarcodeInfo> rep, IServiceProvider serviceProvider) : base(rep)
        {
            _serviceProvider = serviceProvider;
        }

        /// <summary>
        /// 保存条码队列信息
        /// </summary>
        /// <param name="task"></param>
        /// <param name="barCodeTasks"></param>
        /// <exception cref="InvalidOperationException"></exception>
        public void InsertBarCodeTask(MesPrdBarcodeInfo mesPrdBarcodeInfo)
        {
            try
            {
                if (mesPrdBarcodeInfo == null)
                {
                    throw new ArgumentNullException($"保存条码队列信息异常:参数为空");
                }
                var taskInfos = Query(x => x.PrdBarcodeInfo == mesPrdBarcodeInfo.PrdBarcodeInfo).ToList();

                if (taskInfos.Count > 0)
                {
                    Deletes(taskInfos);
                }
                Insert(mesPrdBarcodeInfo);

            }
            catch (Exception e)
            {
                throw new InvalidOperationException($"保存条码队列信息异常:{e.Message}");
            }
        }

        /// <summary>
        /// 查询前四十条未绑定条码
        /// </summary>
        /// <param name="task"></param>
        /// <param name="barCodeTasks"></param>
        /// <exception cref="InvalidOperationException"></exception>
        public List<MesPrdBarcodeInfo> GetUseBarCodeList()
        {
            List<MesPrdBarcodeInfo> list = null;
            try
            {
                string sql = "select  * from mes_prd_barcode_info where  bind_status =0 order by creat_time limit 40;";
                list = _rep.Context.Ado.SqlQuery<MesPrdBarcodeInfo>(sql);
                return list;
            }catch (Exception e)
            {
                throw new InvalidOperationException($"查询小条码队列信息异常:{e.Message}");
            }
        }



        /// <summary>
        /// 移除条码队列
        /// </summary>
        /// <param name="barCode"></param>
        /// <exception cref="InvalidOperationException"></exception>
        //public void RemoveBarCodeTask(string barCode)
        //{
        //    try
        //    {
        //        if (string.IsNullOrEmpty(barCode))
        //        {
        //            throw new ArgumentNullException($"移除条码队列信息异常:参数为空");
        //        }

        //        var taskInfos = Query(x => x.BarCode == barCode).ToList();

        //        Deletes(taskInfos);

        //        RefreshLocalTask();
        //    }
        //    catch (Exception e)
        //    {
        //        throw new InvalidOperationException($"移除条码队列信息异常:{e.Message}");
        //    }
        //}

        ///// <summary>
        /// 刷新条码队列缓存信息
        /// </summary>
        /// <param name="palletTasks"></param>
        /// <exception cref="InvalidOperationException"></exception>
        //private void RefreshLocalTask()
        //{
        //    try
        //    {

        //        using (var scope = _serviceProvider.CreateScope())
        //        {
        //            var info = scope.ServiceProvider.GetRequiredService<List<RealBarCodeTask>>();

        //            var infos = base.Query(x => 1 == 1, y => y.RecordTime, true).ToList();

        //            info.Clear();

        //            info.AddRange(infos);

        //        }
        //    }
        //    catch (Exception e)
        //    {
        //        throw new InvalidOperationException($"刷新条码队列缓存信息异常:{e.Message}");
        //    }
        //}
    }
}
