//--------------------------------------------------------------------
//     此代码由T4模板自动生成  byzhouhang 20210918
//	   生成时间 2023-06-27 15:47:06 
//     对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace IRaCIS.Core.Application.Service
{
    /// 
    /// PublishLogService
    /// 	
    [ApiExplorerSettings(GroupName = "Common")]
    public class PublishLogService(IRepository _publishLogRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService, IPublishLogService
    {
        [HttpPost]
        public async Task> GetPublishLogList(PublishLogQuery inQuery)
        {
            var publishLogQueryable = _publishLogRepository
                .WhereIf(!string.IsNullOrEmpty(inQuery.Version), t => t.Version.Contains(inQuery.Version))
                .WhereIf(!string.IsNullOrEmpty(inQuery.UpdateContent), t => t.UpdateContent.Contains(inQuery.UpdateContent))
                .WhereIf(inQuery.State != null, t => t.State == inQuery.State)
             .ProjectTo(_mapper.ConfigurationProvider);
            var pageList = await publishLogQueryable
                .ToPagedListAsync(inQuery);
            return pageList;
        }
        public async Task AddOrUpdatePublishLog(PublishLogAddOrEdit addOrEditPublishLog)
        {
            Version version;
            if (!Version.TryParse(addOrEditPublishLog.Version, out version)|| !Version.TryParse(addOrEditPublishLog.Version_US, out version))
            {
                //"版本号不符合要求"
                return ResponseOutput.NotOk(_localizer["PublishLog_NotValidVersion"]);
            }
            var verifyExp1 = new EntityVerifyExp()
            {
                VerifyExp = u => u.Version == addOrEditPublishLog.Version || u.Version_US == addOrEditPublishLog.Version_US,
                //"发布编号不能重复"
                VerifyMsg = _localizer["PublishLog_RepeatVersion"]
            };
            var verifyExp2 = new EntityVerifyExp()
            {
                VerifyExp = u => u.IsCurrentVersion == addOrEditPublishLog.IsCurrentVersion,
                //"当前发布版本只允许有一个"
                VerifyMsg = _localizer["PublishLog_OnlyOneCurrentVersion"],
                IsVerify = addOrEditPublishLog.IsCurrentVersion == true
            };
            var entity = await _publishLogRepository.InsertOrUpdateAsync(addOrEditPublishLog, true, verifyExp1, verifyExp2);
            return ResponseOutput.Ok(entity.Id.ToString());
        }
        [HttpDelete("{publishLogId:guid}")]
        public async Task DeletePublishLog(Guid publishLogId)
        {
            var success = await _publishLogRepository.DeleteFromQueryAsync(t => t.Id == publishLogId, true);
            return ResponseOutput.Ok();
        }
        [AllowAnonymous]
        public async Task GetCurrentPublishInfo([FromServices] IOptionsMonitor _sysEmialConfigOPtion)
        {
            var result = await _publishLogRepository.Where(t => t.IsCurrentVersion == true).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync();
            if (result == null)
            {
                //"系统当前版本未标记,请联系维护人员"
                throw new QueryBusinessObjectNotExistException(_localizer["PublishLog_NoCurrentVersion"]);
            }
            result.IsEnv_US = _sysEmialConfigOPtion.CurrentValue.IsEnv_US;
            return result;
        }
        public async Task> GetPublishVersionSelect()
        {
            return await _publishLogRepository.ProjectTo(_mapper.ConfigurationProvider).OrderByDescending(t => t.Version).ToListAsync();
        }
    }
}