//
//  RCWatchKitStatusDelegate.h
//  RongIMLib
//
//  Created by litao on 15/6/4.
//  Copyright (c) 2015年 RongCloud. All rights reserved.
//

#ifndef RongIMLib_RCwatchKitStatusDelegate_h
#define RongIMLib_RCwatchKitStatusDelegate_h

/*!
 用于Apple Watch的IMLib事务监听器

 @discussion 此协议定义了IMLib在状态变化和各种活动时的回调，主要用于Apple
 Watch。
 */
@protocol RCWatchKitStatusDelegate <NSObject>

@optional

#pragma mark 连接状态
/*!
 连接状态发生变化的回调

 @param status      SDK与融云服务器的连接状态
 */
- (void)notifyWatchKitConnectionStatusChanged:(RCConnectionStatus)status;

#pragma mark 消息接收与发送

/*!
 收到消息的回调

 @param receivedMsg     收到的消息实体
 */
- (void)notifyWatchKitReceivedMessage:(RCMessage *)receivedMsg;

/*!
 向外发送消息的回调

 @param message     待发送消息
 */
- (void)notifyWatchKitSendMessage:(RCMessage *)message;

/*!
 发送消息完成的回调

 @param messageId    消息ID
 @param status       完成的状态吗。0表示成功，非0表示失败
 */
- (void)notifyWatchKitSendMessageCompletion:(long)messageId
                                     status:(RCErrorCode)status;

/*!
 上传图片进度更新的回调

 @param progress    进度
 @param messageId   消息ID
 */
- (void)notifyWatchKitUploadFileProgress:(int)progress
                               messageId:(long)messageId;

#pragma mark 消息与会话操作
/*!
 删除会话的回调

 @param conversationTypeList    会话类型的数组
 */
- (void)notifyWatchKitClearConversations:(NSArray *)conversationTypeList;

/*!
 删除消息的回调

 @param conversationType    会话类型
 @param targetId            目标会话ID
 */
- (void)notifyWatchKitClearMessages:(RCConversationType)conversationType
                           targetId:(NSString *)targetId;

/*!
 删除消息的回调

 @param messageIds    消息ID的数组
 */
- (void)notifyWatchKitDeleteMessages:(NSArray *)messageIds;

/*!
 清除未读消息数的回调

 @param conversationType    会话类型
 @param targetId            目标会话ID
 */
- (void)notifyWatchKitClearUnReadStatus:(RCConversationType)conversationType
                               targetId:(NSString *)targetId;

#pragma mark 讨论组

/*!
 创建讨论组的回调

 @param name         讨论组名称
 @param userIdList   成员的用户ID列表
 */
- (void)notifyWatchKitCreateDiscussion:(NSString *)name
                            userIdList:(NSArray *)userIdList;

/*!
 创建讨论组成功的回调

 @param discussionId    讨论组的ID
 */
- (void)notifyWatchKitCreateDiscussionSuccess:(NSString *)discussionId;

/*!
 创建讨论组失败

 @param errorCode   创建失败的错误码
 */
- (void)notifyWatchKitCreateDiscussionError:(RCErrorCode)errorCode;

/*!
 讨论组加人的回调

 @param discussionId    讨论组的ID
 @param userIdList      添加成员的用户ID列表

 @discussion 加人的结果可以通过notifyWatchKitDiscussionOperationCompletion获得。
 */
- (void)notifyWatchKitAddMemberToDiscussion:(NSString *)discussionId
                                 userIdList:(NSArray *)userIdList;

/*!
 讨论组踢人的回调

 @param discussionId    讨论组ID
 @param userId          用户ID

 @discussion 踢人的结果可以通过notifyWatchKitDiscussionOperationCompletion获得。
 */
- (void)notifyWatchKitRemoveMemberFromDiscussion:(NSString *)discussionId
                                          userId:(NSString *)userId;

/*!
 退出讨论组的回调

 @param discussionId    讨论组ID

 @discussion 创建的结果可以通过notifyWatchKitDiscussionOperationCompletion获得。
 */
- (void)notifyWatchKitQuitDiscussion:(NSString *)discussionId;

/*!
 讨论组操作的回调。tag：100-邀请；101-踢人；102-退出。status：0成功，非0失败

 @param tag       讨论组的操作类型。100为加人，101为踢人，102为退出
 @param status    操作的结果。0表示成功，非0表示失败
 */
- (void)notifyWatchKitDiscussionOperationCompletion:(int)tag
                                             status:(RCErrorCode)status;

@end
#endif
