using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.Service.Inspection.DTO;
using IRaCIS.Core.Domain.Share;
using MediatR;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace IRaCIS.Core.Application.Image.QA
{
    public interface IQCOperationService
    { 
        Task<IResponseOutput> CheckBack(Guid subjectVisitId);
        Task<IResponseOutput> SetNeedReupload(Guid trialId, Guid qcChallengeId);
        Task<IResponseOutput> QCPassedOrFailed(Guid trialId, Guid subjectVisitId, [FromRoute] AuditStateEnum auditState);
        Task<IResponseOutput> SetCheckPass(SetCheckPassDt data);




        Task<IResponseOutput> AddCheckChallengeReply(CheckChallengeDialogCommand checkDialogCommand);
        Task<IResponseOutput> AddOrUpdateQCChallenge(QCChallengeCommand qaQuestionCommand, Guid trialId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType);
        Task<IResponseOutput> AddOrUpdateQCQuestionAnswerList(QCQuestionAnswerCommand[] qcQuestionAnswerCommands, Guid trialId, Guid subjectVisitId, [FromRoute] TrialQCProcess trialQCProcess, [FromRoute] CurrentQC currentQCType);
        Task<IResponseOutput> AddQCChallengeReply(QADialogCommand qaDialogCommand);
        Task<IResponseOutput> CloseCheckChallenge(CloseCheckChallengeDto input);
        Task<IResponseOutput> CloseQCChallenge(CloseQCChallengeInDto input);
        Task<IResponseOutput> CRCRequestReUpload(Guid qcChallengeId);
        Task<IResponseOutput> CRCRequestToQC(CRCRequestToQCCommand cRCRequestToQCCommand);
        Task<IResponseOutput> CRCRequstCheckBack(Guid subjectVisitId);
        Task<IResponseOutput> DeleteQCChallenge(Guid qcChallengeId);
        Task<IResponseOutput> DeleteStudyList(Guid[] ids, Guid subjectVisitId, Guid trialId);
        Task<IResponseOutput> ObtainOrCancelQCTask(Guid trialId, Guid subjectVisitId, bool obtaionOrCancel);
        Task<IResponseOutput> SetReuploadFinished(CRCReuploadFinishedCommand cRCReuploadFinishedCommand);
        Task<IResponseOutput> SetSeriesState(Guid subjectVisitId, Guid studyId, Guid seriesId, int state);
        Task<IResponseOutput> SetVisitUrgent(Guid trialId, Guid subjectVisitId, bool setOrCancel);
        Task<IResponseOutput> UpdateModality(UpdateModalityCommand updateModalityCommand);
        Task<IResponseOutput> UpdateSubjectAndSVInfo(UploadSubjectAndVisitCommand command);
        //Task<IResponseOutput> UploadVisitCheckExcel(IFormFile file, Guid trialId);
        Task<IResponseOutput> VerifyCanQCPassedOrFailed(Guid subjectVisitId);

 
        Task<IResponseOutput> ForwardSVDicomImage(Guid[] subjectVisitIdList);
    }
}