//--------------------------------------------------------------------
//     此代码由T4模板自动生成  byzhouhang 20210918
//	   生成时间 2023-06-01 13:42:25 
//     对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
//--------------------------------------------------------------------

using IRaCIS.Core.Domain.Models;
using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Interfaces;
using IRaCIS.Core.Application.ViewModel;
namespace IRaCIS.Core.Application.Service
{
    /// <summary>
    /// InternationalizationService
    /// </summary>	
    [ApiExplorerSettings(GroupName = "Common")]
    public class InternationalizationService : BaseService, IInternationalizationService
    {

        private readonly IRepository<Internationalization> _internationalizationRepository;

        public InternationalizationService(IRepository<Internationalization> internationalizationRepository)
        {
            _internationalizationRepository = internationalizationRepository;
        }

        public async Task<PageOutput<InternationalizationView>> GetInternationalizationList(InternationalizationQuery inQuery)
        {

            var internationalizationQueryable =_internationalizationRepository
                .WhereIf(inQuery.FolderPath!=null,t=>t.FolderPath.Contains(inQuery.FolderPath))
                  .WhereIf(inQuery.Code != null, t => t.FolderPath.Contains(inQuery.Code))
                    .WhereIf(inQuery.Value != null, t => t.FolderPath.Contains(inQuery.Value))
                      .WhereIf(inQuery.ValueCN != null, t => t.FolderPath.Contains(inQuery.ValueCN))
             .ProjectTo<InternationalizationView>(_mapper.ConfigurationProvider);

            var pageList = await internationalizationQueryable
            .ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "Id" : inQuery.SortField,
            inQuery.Asc);

            return pageList;
        }


        public async Task<IResponseOutput> AddOrUpdateInternationalization(InternationalizationAddOrEdit addOrEditInternationalization)
        {
            var verifyExp1 = new EntityVerifyExp<Internationalization>()
            {
                VerifyExp = t => t.Code == addOrEditInternationalization.Code && t.InternationalizationType == addOrEditInternationalization.InternationalizationType,

                VerifyMsg = $"该类型已有{addOrEditInternationalization.Code}名称的国际化标识",
                IsVerify = true
            };

            var entity = await _internationalizationRepository.InsertOrUpdateAsync(addOrEditInternationalization, true,verifyExp1);

            return ResponseOutput.Ok(entity.Id.ToString());

        }


        [HttpDelete("{internationalizationId:guid}")]
        public async Task<IResponseOutput> DeleteInternationalization(Guid internationalizationId)
        {
            var success = await _internationalizationRepository.DeleteFromQueryAsync(t => t.Id == internationalizationId, true);
            return ResponseOutput.Ok();
        }


    }
}