using System;
using System.Collections.Generic;
using System.Text;
using Vinno.vCloud.Common.Client.Managers.Interfaces.Data;
using Vinno.vCloud.Protocol.Infrastructures;
using Vinno.vCloud.Protocol.Messages.Client.Account;
using Vinno.vCloud.Protocol.Messages.Client.Remedical.Reports;
using Vinno.vCloud.Protocol.Messages.Client.Remedical.TerminalDatas;
using Vinno.vCloud.Protocol.Messages.Client.Remedical.TerminialReords;
using Vinno.vCloud.Protocol.Messages.Client.RemoteDiagnosis;
using Vinno.vCloud.Protocol.Messages.Common;
using Vinno.vCloud.Protocol.Messages.Live;
using Vinno.vCloud.Protocol.Messages.Report;

namespace Vinno.vCloud.Client.Proxy.Interfaces
{
    interface IFlyinsonoClient : IDisposable
    {
        string  OpenId { get; }
        int LeftTime { get; }
        /// <summary> 
        /// 通过OpenId登录
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        LoginStatus LoginByOpenId(string openId, string username = "", string password = "");

        /// <summary>
        /// Log out the logined user
        /// </summary>
        /// <returns></returns>
        bool Logout();

        /// <summary>
        /// 查询系统默认报告模板
        /// </summary>
        /// <param name="languageCode"></param>
        /// <returns></returns>
        List<ReportTemplateMessage> GetReportTemplates(string languageCode);

        /// <summary>
        /// 查询系统默认词条
        /// </summary>
        /// <param name="languageCode"></param>
        /// <returns></returns>
        List<ReportTemplateMessage> GetThesaurusTemplates(string languageCode);

        /// <summary>
        /// 开始会诊
        /// </summary>
        /// <param name="roomId"></param>
        /// <param name="recipientInfos"></param>
        /// <param name="terminalIds"></param>
        /// <param name="initiatorName"></param>
        /// <param name="consultationId"></param>
        /// <returns></returns>
        ConsultationResult StartConversation(string roomId, string consultationId);
        /// <summary>
        /// 取消开始会诊
        /// </summary>
        /// <param name="roomId"></param>
        /// <returns></returns>
        LiveStates CancelStartConversation(string roomId);
        /// <summary>
        /// 退出会诊
        /// </summary>
        /// <param name="roomId"></param>
        /// <param name="forceClosed"></param>
        /// <param name="terminalId"></param>
        /// <returns></returns>
        LiveStates ExitConsultation(string roomId, bool forceClosed, string terminalId, string consultationId);
        /// <summary>
        /// 接受会诊
        /// </summary>
        /// <param name="roomId"></param>
        /// <param name="featureSource"></param>
        /// <param name="liveStates"></param>
        /// <param name="initiatorId"></param>
        /// <returns></returns>
        LiveStates AcceptConsultation(string roomId, FeatureSource featureSource, LiveStates liveStates, string initiatorId);
        /// <summary>
        /// 拒绝会诊
        /// </summary>
        /// <param name="roomId"></param>
        /// <param name="initiatorId"></param>
        /// <returns></returns>
        LiveStates RejectConsultation(string roomId, string initiatorId);
        /// <summary>
        /// 会诊过程中邀请成员
        /// </summary>
        /// <param name="roomId"></param>
        /// <param name="feature"></param>
        /// <param name="recipientInfos"></param>
        /// <returns></returns>
        ConsultationResult InviteConsultationMember(string roomId, FeatureSource feature, List<RecipientInfo> recipientInfos);

        /// <summary>
        /// 获取账号信息
        /// </summary>
        /// <param name="openId"></param>
        /// <returns></returns>
        WechatUserInfo GetUserInfoByOpenId(string openId);

        /// <summary>
        /// 查询会诊记录
        /// </summary>
        /// <param name="startIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        FindNewAppointmentsResult6 FindConsultationRecords(int startIndex, int pageSize, AppointmentsFilterMessage filter);

        /// <summary>
        /// 创建会诊
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        string CreateConsultationRecord(CreateAppointmentRequest1 request);

        /// <summary>
        /// 获取自己的医院列表
        /// </summary>
        /// <returns></returns>
        List<OrganBaseInfoMessage> GetMyHospitals();

        /// <summary>
        /// 获取自己超声机
        /// </summary>
        /// <returns></returns>
        List<Interfaces.TerminalInfo> GetMyTerminals();

        /// <summary>
        /// 通过医院获取专家列表
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="hospitalId"></param>
        /// <returns></returns>
        List<ExpertDetailMessage> FindMyExpertsByHospitalId(string hospitalId);

        /// <summary>
        /// 获取检查部位
        /// </summary>
        /// <returns></returns>
        List<string> GetCheckPoint();

        /// <summary>
        ///通过远程记录Id查询图像
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        GetPatientRecordDatasSuccess9 GetPatientRecordImageById(GetPatientRecordDatasRequest11 request);

        /// <summary>
        /// 通过记录Id获取报告
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        NewGetReportsSuccess5 GetReportByecordId(NewGetReportsRequest5 request);

        /// <summary>
        /// 查询报告详情
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        NewReportInfoMessage5 GetReportById(string recordId, string reportId);

        /// <summary>
        /// 查询分时远程诊断记录
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        GetRecords11Success GetExamRecords(GetClientRecord11Request request);

        /// <summary>
        /// 获取会诊信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        ConsultationMessage FindConsultationById(string id);

        /// <summary>
        /// 安排申请单
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        bool ArrangeConsultation(ArrangeAppointmentRequest request);

        /// <summary>
        /// 上传会诊截图
        /// </summary>
        /// <param name="consulationId"></param>
        /// <param name="imageToken"></param>
        /// <returns></returns>
        bool UploadConsultationImages(string consulationId, string imageToken);


        /// <summary>
        /// 上传会诊视频
        /// </summary>
        /// <param name="consulationId"></param>
        /// <param name="imageToken"></param>
        /// <returns></returns>
        bool UploadConsulationVideos(string consulationId, string videoToken, string previewToken);

        /// <summary>
        /// 上传会诊状态
        /// </summary>
        /// <param name=""></param>
        /// <returns></returns>
        bool UpdateRecordState(UpdateAppointmentStateRequest request);

        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="fileData"></param>
        /// <returns></returns>
        string UploadFile(byte[] fileData);

        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="fileData"></param>
        /// <returns></returns>
        byte[] DownloadFile(string fileToken);

        void DeActivate();

        void Activate();

        /// <summary>
        /// 获取会诊报告
        /// </summary>
        /// <param name="consulationId"></param>
        /// <param name="imageToken"></param>
        /// <returns></returns>
        NewGetReportsSuccess5 GetConsultationReports(GetConsultationReportsRequest5 request);

        /// <summary>
        /// 保存报告
        /// </summary>
        /// <param name=""></param>
        /// <returns></returns>
        string SaveReport(NewAddReportRequest4 request);



    }
}