using System;
using System.Collections.Generic;
using Vinno.IUS.Common.Args;
using Vinno.vCloud.Common.FIS.FLYINSONOLogin;
using Vinno.vCloud.FIS.CrossPlatform.Common.LiveVideo;
using Vinno.vCloud.Protocol.Infrastructures;
using Vinno.vCloud.Protocol.Messages.Live;
namespace Vinno.vCloud.Common.FIS.Consultation
{
public interface IConsultation : IFeature, IDisposable
{
///
/// Raised when the flyinsono user status is changed.
///
event EventHandler UserStatusChanged;
///
/// Flyinsono user login
///
/// The flyinsono user name.
/// The password
/// isScanLogin
void Login(string userName, string password, bool isScanLogin);
///
/// Flyinsono user log off.
///
void LogOff();
///
/// Get QRCode Info For Scan Login
///
///
string GetQRCodeInfoForScanLogin();
///
/// Gets the hospital info of the flyinsono user.
///
///
OrganizationInfo GetHospitalInfo();
///
/// Gets the experts list by hospital id.
///
/// The hospital id.
/// The experts of the hospital.
IEnumerable GetExperts(string hospitalId);
///
/// Remote device ultrasound image frame arrived
///
event EventHandler UltrasoundImageFrameArrived;
///
/// Remote device ultrasound camera frame arrived
///
event EventHandler UltrasoundCameraFrameArrived;
///
/// Local camera video frame arrived only for consultation
///
event EventHandler ConsultationLocalVideoFrameArrived;
///
/// Remote camera frame arrived only for consultation
///
event EventHandler ConsultationRemoteVideoFrameArrived;
///
/// Raised when receive a consultation request from server.
///
event EventHandler ConsultationRequestArrived;
///
/// Other one join the consultation notification Arrived from server
///
event EventHandler JoinConsultationNotifyArrived;
///
/// other reject notify arrived from server
///
event EventHandler RejectConsultationNotifyArrived;
///
/// Raised when the consultation is disconnect.
///
event EventHandler ConsultationDisconnected;
///
/// Raised when consultation records collection changed.
///
event EventHandler> ConsultationRecordsChanged;
///
/// Raised when a consultation record updated.
///
event EventHandler ConsultationRecordUpdated;
///
/// Raised when consultation Member Changed
///
event EventHandler ConsultationMemberChangedNotificationArrived;
///
/// 接收到其他用户的白板信息
///
event EventHandler InteractiveBoardInfoArrived;
///
/// 接收到清除白板信息
///
event EventHandler ClearInteractiveBoardArrived;
///
/// 收到即时会诊的通知
///
event EventHandler EmergencyConsultationRequestArrived;
///
/// Accept the consultation request.
///
/// The camera id.
/// The micphone id.
/// The speakder id.
/// The chat live states.
LiveStates AcceptConsultation(string videoHardwareId, string micHardwareId, string speakerHardwareId);
///
/// Reject consultation request.
///
LiveStates RejectConsultation();
///
/// Hang up a consultation.
///
LiveStates HangupConsultation();
///
/// Start a consultation request.
///
/// The recipients.
/// The chat live status
LiveStates RequestConsultation(List recipients, string cameraHardwareId, string micHardwareId, string speakerHardwareId);
///
/// Cancel consultation request
///
LiveStates CancelConsultationRequest(bool forceClosed);
///
/// Gets the live states of the current consultation.
///
/// The current consultation live states
LiveStates GetCurrentConsultationLiveStates();
///
/// Doctor apply consultation.
///
/// The consultation record info to apply.
/// True: success. False: falied./returns>
bool ApplyConsultationRecord(ConsultationRecord consultationRecord);
///
/// Doctor delete consultation(The consultation record can be deleted only if the state is withdrawn.)
///
///
///
bool DeleteConsultationRecord(string consultationId);
///
/// Doctor withdraw consultation.
///
/// The consultation id.
/// True: success. False: falied./returns>
bool WithDrawConsultationRecord(string consultationId);
///
/// Doctor update consultation.
///
/// The consultation record info to update.
/// True: success. False: falied./returns>
bool UpdateConsultationRecord(ConsultationRecord consultationRecord);
///
/// Expert arrange consultation.
///
/// The consultation to be arranged.
/// True: success. False: falied./returns>
bool ArrangeConsultationRecord(ConsultationRecord consultationRecord);
///
/// Set current consultation record.
///
/// The current consultation record id.
void SetCurrentConsultationRecord(string consultationId);
///
/// 发送画板数据
///
///
///
bool SendInteractiveBoardData(string jsonData);
///
/// 清除画板数据
///
///
bool ClearInteractiveBoardData();
///
/// 获取当前会诊记录的报告
///
///
IEnumerable GetCurrentConsultationRecordReportImage();
///
/// GetConsultationRecordList
///
/// Start Index
/// page Size
/// Filter
bool GetConsultationRecordList(int startIndex, int pageSize, ConsultationRecordFilter consultationRecordFilter);
///
/// 开始即时呼叫
///
///
///
///
///
EnumEmergencyConsultationResult RequestEmergencyConsultation(string cameraId, string micId, string speakerId);
///
/// 发起者取消即时呼叫
///
LiveStates CancelEmergencyConsultation();
///
/// 接受即时呼叫
///
/// param >
/// < param name="micId">
/// param >
/// < returns > returns >
LiveStates AcceptEmergencyConsultation(string cameraId, string micId, string speakerId);
///
/// 拒绝即时呼叫
///
LiveStates RejectEmergencyConsultation();
///
/// 收到关闭摄像头用户清单的通知
///
event EventHandler> MuteVideoUserListNotifyArrived;
}
}