package com.ym.mec.biz.service;

import com.ym.mec.auth.api.entity.SysUser;
import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
import com.ym.mec.biz.dal.entity.ImGroup;
import com.ym.mec.biz.dal.entity.ImGroupMember;
import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
import com.ym.mec.common.page.PageInfo;
import com.ym.mec.common.service.BaseService;

import java.util.List;
import java.util.Map;

public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {

	/**
	 * 加入群组
	 * @param imGroupId 群编号
	 * @param userId 用户编号
	 * @param roleType 角色类型
	 * @param isAdmin 是否是管理员
	 * @return
	 */
	boolean join(String imGroupId, Integer userId, String roleType, boolean isAdmin);

	/**
	 * 加入群组
	 * @param imGroupId 群编号
	 * @param roleType 角色类型
	 * @param isAdmin 是否是管理员
	 * @return
	 */
	boolean join(String imGroupId, String roleType, boolean isAdmin, ImGroup imGroup, SysUser user);

	/**
	 * 批量加入群组
	 * @param imGroupId 群组编号
	 * @param userRoleMap key-用户编号  value-角色类型
	 * @return
	 */
	boolean join(String imGroupId, Map<Integer, String> userRoleMap);

	/**
	 * 指定用户退出群组
	 * @param imGroupId 群组编号
	 * @param userId 指定的用户编号
	 * @return
	 */
	boolean quit(String imGroupId, Integer userId);

	/**
	 * 退出指定群组
	 * @param imGroupIdList 群组编号列表
	 * @param userId 用户编号
	 * @return
	 */
	boolean quit(List<String> imGroupIdList, Integer userId);

	/**
	 * 用户批量退出群组
	 * @param imGroupId 群组编号
	 * @param userIdList 学生编号
	 * @return
	 */
	boolean quit(String imGroupId, List<Integer> userIdList);

	/**
	 * 修改角色类型
	 * @param imGroupId 群组编号
	 * @param userId 用户编号
	 * @param roleType 角色类型
	 * @return
	 */
	boolean updateRoleType(String imGroupId, Integer userId, String roleType);

	void batchInsert(List<ImGroupMember> imGroupMemberList);

	/**
	 * 批量删除
	 * @param imGroupMemberList
	 */
	void batchDelete(List<ImGroupMember> imGroupMemberList);

	/**
	 * 根据群编号和用户编号批量删除
	 * @param imGroupMemberList
	 */
	void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList);

	/**
	 * 是否在群里
	 * @param groupId
	 * @param userId
	 * @return
	 */
	boolean isExit(String groupId, String userId);

	void delRepeat();

	List<ImGroupMember> queryMembers(String groupId, List<String> userIdList, Integer tenantId);

	PageInfo<ImGroupMemberDto> queryGroupMemberPage(GroupMemberQueryInfo queryInfo);

	void batchJoin(String imGroupId, String userId, String roleType);
}