using IRaCIS.Application.Contracts;
using IRaCIS.Core.Domain.Share;

namespace IRaCIS.Application.Interfaces
{

    public interface ITrialService
    {
        bool TrialExpeditedChange { get; set; }

        Task<IResponseOutput<Trial>> AddOrUpdateTrial(TrialCommand trialAddModel, ITrialConfigService _ITrialConfigService);
        Task<IResponseOutput> DeleteTrial(Guid trialId);
        Task<PageOutput<TrialDetailDTO>> GetReviewerTrialListByEnrollmentStatus(TrialByStatusQueryDTO param);
        Task<List<Guid>> GetTrialEnrollmentReviewerIds(Guid trialId);
        Task<int> GetTrialExpeditedState(Guid trialId);
        Task<TrialDetailDTO> GetTrialInfoAndLockState(Guid projectId);
        Task<TrialAndTrialStateVieModel> GetTrialInfoAndMaxTrialState(Guid trialId);
        Task<PageOutput<TrialDetailDTO>> GetTrialList(TrialQueryDTO searchParam);
        Task<PageOutput<TrialDetailDTO>> GetTrialListByReviewer(ReviewerTrialQueryDTO searchModel);
        Task<int> GetTrialMaxState(Guid trialId);
        Task<IResponseOutput> UpdateEnrollStatus(Guid trialId, EnrollStatus status);
    }
}