//--------------------------------------------------------------------
//     此代码由T4模板自动生成  byzhouhang 20210918
//	   生成时间 2021-12-23 13:20:59 
//     对此文件的更改可能会导致不正确的行为，并且如果重新生成代码，这些更改将会丢失。
//--------------------------------------------------------------------

using Microsoft.AspNetCore.Mvc;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Domain.Share;

namespace IRaCIS.Core.Application.Contracts
{
    /// <summary>
    /// TrialSiteEquipmentSurveyService
    /// </summary>	
    [ApiExplorerSettings(GroupName = "Trial")]
    public class TrialSiteEquipmentSurveyService : BaseService, ITrialSiteEquipmentSurveyService
    {
        private readonly IRepository<TrialSiteEquipmentSurvey> _trialSiteEquipmentSurveyRepository;
        private readonly IRepository<TrialSiteSurvey> _trialSiteSurveyRepository;

        public TrialSiteEquipmentSurveyService(IRepository<TrialSiteEquipmentSurvey> trialSiteEquipmentSurveyRepository, IRepository<TrialSiteSurvey> trialSiteSurveyRepository)
        {
            _trialSiteEquipmentSurveyRepository = trialSiteEquipmentSurveyRepository;
            _trialSiteSurveyRepository = trialSiteSurveyRepository;
        }


        [HttpGet("{trialSiteSurveyId:guid}")]
        public async Task<List<TrialSiteEquipmentSurveyView>> GetTrialSiteEquipmentSurveyList(Guid trialSiteSurveyId, string? scannerType)
        {
            var trialSiteEquipmentSurveyQueryable = _trialSiteEquipmentSurveyRepository.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId)
            .WhereIf(!string.IsNullOrEmpty(scannerType), t => t.ScannerType.Contains(scannerType!))
            .ProjectTo<TrialSiteEquipmentSurveyView>(_mapper.ConfigurationProvider);

            return await trialSiteEquipmentSurveyQueryable.ToListAsync();
        }

        [TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })]
        [HttpPost("{trialId:guid}")]
        public async Task<IResponseOutput> AddOrUpdateTrialSiteEquipmentSurvey(TrialSiteEquipmentSurveyAddOrEdit addOrEditTrialSiteEquipmentSurvey)
        {

            if (await _trialSiteSurveyRepository.AnyAsync(t => t.Id == addOrEditTrialSiteEquipmentSurvey.TrialSiteSurveyId && (t.IsDeleted == true ||t.State==TrialSiteSurveyEnum.PMCreatedAndLock), true))
            {
                return ResponseOutput.NotOk(_localizer["TrialSiteEquipment_Invalid"]);
            }



            var entity = await _trialSiteEquipmentSurveyRepository.InsertOrUpdateAsync(addOrEditTrialSiteEquipmentSurvey, true);

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

        }

        [TypeFilter(typeof(TrialResourceFilter),Arguments = new object[] { "AfterStopCannNotOpt" })]
        [HttpDelete("{trialSiteEquipmentSurveyId:guid}/{trialId:guid}")]
        public async Task<IResponseOutput> DeleteTrialSiteEquipmentSurvey(Guid trialSiteEquipmentSurveyId)
        {
            if (await _trialSiteEquipmentSurveyRepository.Where(t => t.Id == trialSiteEquipmentSurveyId).AnyAsync(t => t.TrialSiteSurvey.State==TrialSiteSurveyEnum.PMCreatedAndLock))
            {
                //---已锁定,不允许操作
                return ResponseOutput.NotOk(_localizer["TrialSiteEquipment_Locked"]);
            }
            var success = await _trialSiteEquipmentSurveyRepository.BatchDeleteNoTrackingAsync(t => t.Id == trialSiteEquipmentSurveyId);

            return ResponseOutput.Result(success);
        }


    }
}
