using System;
using System.Collections.Generic;
using IRaCIS.Core.Application.Contracts.Dicom.DTO;
using System.Threading.Tasks;
using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Application.Contracts;

namespace IRaCIS.Application.Interfaces
{
    public interface IStudyService
    {
      



        //IResponseOutput ForwardStudy(Guid studyId);

        DicomTrialSiteSubjectInfo GetSaveToDicomInfo(Guid subjctVisitId);

        void GetHasUploadSeriesAndInstance(Guid studyId, ref List<string> seriesInstanceUidList, ref List<string> instanceUidList);


         void UploadOrReUploadNeedTodo(ArchiveStudyCommand archiveStudyCommand, List<Guid> archiveStudyIds, ref DicomArchiveResult reusult, StudyMonitor monitor);



        //PageOutput<StudyDTO> GetStudyList(StudyQueryDTO queryDto);


        //Task<IResponseOutput> DicomAnonymize(Guid studyId, string optuserName);


        //List<StudyStatusDetailDTO> GetStudyStatusDetailList(Guid studyId);


        //IEnumerable<RelationVisitDTO> GetRelationVisitList(decimal visitNum, string tpCode);
        //List<SubjectVisitStudyDTO> GetSubjectVisitStudyList(Guid trialId, Guid siteId, Guid subjectId, Guid subjectVisitId);

        //PageOutput<DistributeReviewerStudyStatusDTO> GetDistributeStudyList(StudyStatusQueryDTO studyStatusQueryDto);


        //IEnumerable<RelationStudyDTO> GetAllRelationStudyList(Guid studyId);


        //IEnumerable<StudyStatDTO> GetStudyStatList(Guid trialId, Guid subjectId, Guid siteId);


        //bool UpdateReUploadNewStudyCode(Guid studyId, Guid newStudyId);


        //void ReUploadSameStudy(Guid subjectVisitId, Guid studyId);


        //VerifyStudyUploadResult VerifyStudyAllowUpload(string studyInstanceUid, Guid trialId, Guid? studyId);

        //List< VerifyStudyUploadResult>  VerifyStudyAllowUpload(VerifyUploadOrReupload verifyList);

        //void ClearStudyInstanceAndSeriseData(Guid studyId);

        //IResponseOutput DeleteStudy(Guid id);



        //Guid AddSubjectVisit(Guid subjectId, Guid siteId, Guid visitStageId, DateTime? SVSTDTC, DateTime? SVENDTC);
        //void UpdateSubjectLatestInfo(Guid subjectVisitId);

        //void UpdateSubjectVisit(Guid subjectVisitId, Guid studyId);

        //bool DistributeStudy(StudyReviewerCommand studyReviewer);

        //IResponseOutput EditStudyReviewer(StudyReviewerEditCommand studyReviewerEditCommand);


        //void UploadStudyDeal(Guid studyId);


        //List<ReviewerDistributionDTO> GetReviewerListByTrialId(Guid trialId);

        //IResponseOutput UpdateStudyStatus(StudyStatusDetailCommand studyStatusDetailDTO);

        //string GetStudyPreview(Guid studyId);
        //DicomStudyDTO GetStudyItem(Guid studyId);

        ////bool SaveImageLabel(ImageLabelDTO label);
        //bool SaveImageLabelList(ImageLabelCommand imageLabelCommand);
        //IEnumerable<ImageLabelDTO> GetImageLabel(string tpCode);

        //IResponseOutput DealNonDicomFile(Dictionary<string,string> filePathDic, ArchiveStudyCommand archiveStudyCommand);
        //bool ReUploadDifferentStudy(Guid subjectVisitId, Guid abandonStudyId, Guid newStudyId);


        //List<QANoticeDTO> GetQANoticeList(Guid studyId);



    }
}