using AutoMapper;
using EasyCaching.Core;
using EntityFrameworkCore.Triggered;
using IRaCIS.Core.Application.Service;
using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Domain.Share;
using IRaCIS.Core.Infrastructure;
using System.Linq.Expressions;

namespace IRaCIS.Core.Application.Triggers
{

    public class VisitTaskIAfterSignTrigger : IAfterSaveTrigger<VisitTask>
    {

        private readonly IRepository<VisitTask> _visitTaskRepository;

        private readonly IRepository<Subject> _subjectRepository;



        public VisitTaskIAfterSignTrigger(IRepository<VisitTask> visitTaskRepository, IRepository<Subject> subjectRepository)
        {
            _visitTaskRepository = visitTaskRepository;
            _subjectRepository = subjectRepository;
        }


        //添加任务的时候  如果需要签名 并且已经签名了  
        public async Task AfterSave(ITriggerContext<VisitTask> context, CancellationToken cancellationToken)
        {
            var visitTask = context.Entity;

           
            if (visitTask.SignTime != null && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned 

                //&& _subjectRepository.Where(t=>t.Id==visitTask.SubjectId).SelectMany(c=>c.SubjectVisitList)
                //.Any(t=>t.Id==visitTask.SourceSubjectVisitId && t.IsBaseLine)
                )
            {
                //任务阅片完成 自动释放
                await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == visitTask.SubjectId && t.TrialReadingCriterionId==visitTask.TrialReadingCriterionId , t=>new VisitTask() { SubjectCriterionClaimUserId=null});
            }


        }


    }
}