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

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本：4.0.30319.42000
* 机器名称：LAPTOP-E0N2L34V
* 命名空间：SlnMesnac.Repository.service.Impl
* 唯一标识：496f8d2b-70e3-4a05-ae18-a9b0fcd06b82
*
* 创建者：WenJY
* 电子邮箱：wenjy@mesnac.com
* 创建时间：2024-03-27 21:58:35
* 版本：V1.0.0
* 描述：
*
*--------------------------------------------------------------------
* 修改人：
* 时间：
* 修改说明：
*
* 版本：V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.Repository.service.Impl
{
    public class BaseMaterialServiceImpl : BaseServiceImpl<BaseMaterialInfo>, IBaseMaterialService
    {
        private ILogger<BaseMaterialServiceImpl> _logger;

        public BaseMaterialServiceImpl(Repository<BaseMaterialInfo> repository, ILogger<BaseMaterialServiceImpl> logger):base(repository)
        {
            _logger = logger;
        }

        /// <summary>
        /// 通过物料编码获取物料信息
        /// </summary>
        /// <param name="materialCode"></param>
        /// <returns></returns>
        public BaseMaterialInfo GetMaterialInfoByMaterialCode(string materialCode)
        {
            BaseMaterialInfo materialInfo = null;
            try
            {
                materialInfo = base._rep.GetFirst(x => x.MaterialCode == materialCode);
            }
            catch (Exception ex)
            {
                _logger.LogError($"根据物料编号获取物料信息异常:{ex.Message}");
            }
            return materialInfo;
        }

        /// <summary>
        /// 通过SAP物料编码获取物料信息
        /// </summary>
        /// <param name="sapMaterialCode"></param>
        /// <returns></returns>
        public BaseMaterialInfo GetMaterialInfoBySapMaterialCode(string sapMaterialCode)
        {
            BaseMaterialInfo materialInfo = null;
            try
            {
                //materialInfo = base._rep.GetFirst(x => x.SAPMaterialCode == sapMaterialCode);
            }
            catch (Exception ex)
            {
                _logger.LogError($"根据SAP物料编号获取物料信息异常:{ex.Message}");
            }
            return materialInfo;
        }

        /// <summary>
        /// 获取所有的物料信息
        /// </summary>
        /// <returns></returns>
        public List<BaseMaterialInfo> GetMaterialInfos()
        {
            List<BaseMaterialInfo> materialInfos = null;
            try
            {
                materialInfos = base._rep.GetList();
            }
            catch (Exception ex)
            {
                _logger.LogError($"获取物料信息异常:{ex.Message}");
            }
            return materialInfos;
        }

        /// <summary>
        /// 通过物料类别获取物料信息
        /// </summary>
        /// <param name="majorTypeId">物料大类</param>
        /// <param name="minorTypeId">物料细类</param>
        /// <returns></returns>
        public List<BaseMaterialInfo> GetMaterialInfosByMaterialType(int majorTypeId, string minorTypeId)
        {
            List<BaseMaterialInfo> materialInfos = null;
            try
            {
                Expression<Func<BaseMaterialInfo, bool>> exp = x => true;

                if (majorTypeId != 0)
                {
                    //exp = exp.And(x => x.MajorTypeID == majorTypeId);
                }
                else if (!string.IsNullOrEmpty(minorTypeId))
                {
                    //exp = exp.And(x => x.MinorTypeID == minorTypeId);
                }

                materialInfos = base._rep.GetList(exp);
            }
            catch (Exception ex)
            {
                _logger.LogError($"通过物料类型获取物料信息异常:{ex.Message}");
            }
            return materialInfos;
        }
    }
}

