package com.red.circle.external.inner.service.message;

import com.red.circle.external.inner.model.cmd.message.BroadcastGroupMsgBodyCmd;
import com.red.circle.external.inner.model.cmd.message.CreateGroupAddMemberCmd;
import com.red.circle.external.inner.model.cmd.message.CreateGroupCmd;
import com.red.circle.external.inner.model.cmd.message.CustomGroupMsgBodyCmd;
import com.red.circle.external.inner.model.cmd.message.DismissGroupCmd;
import com.red.circle.external.inner.model.cmd.message.GroupBanCmd;
import com.red.circle.external.inner.model.cmd.message.GroupUnbanCmd;

/**
 * IM 群组服务.
 *
 * @author pengliang on 2023/8/16
 */
public interface ImGroupClientService {

  /**
   * 群广播通知，通知指定群（自定义消息，内部通讯.
   */
  void sendMessageBroadcast(BroadcastGroupMsgBodyCmd cmd);

  /**
   * 发送自定义消息.
   */
  void sendCustomMessage(String groupId, CustomGroupMsgBodyCmd cmd);

  /**
   * 群成员封禁.
   *
   * @return true 成功，false 失败.
   */
  Boolean banGroupMember(GroupBanCmd cmd);

  /**
   * 解封成员封禁.
   *
   * @return true 成功，false 失败.
   */
  Boolean unBanGroupMember(GroupUnbanCmd cmd);

  /**
   * 创建群.
   */
  boolean createPublicGroup(CreateGroupCmd cmd);

  /**
   * 创建群.
   */
  boolean createAVChatRoomGroup(CreateGroupCmd cmd);

  /**
   * 创建群.
   */
  void addGroupMembers(CreateGroupAddMemberCmd cmd);

  /**
   * 解散群.
   */
  void destroyGroup(String groupId);

}
