package org.springblade.modules.martial.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.core.mp.support.Query;
import org.springblade.modules.martial.pojo.dto.BatchGenerateInviteDTO;
import org.springblade.modules.martial.pojo.dto.GenerateInviteDTO;
import org.springblade.modules.martial.pojo.entity.MartialJudgeInvite;
import org.springblade.modules.martial.pojo.vo.MartialJudgeInviteVO;

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

/**
 * JudgeInvite 服务类
 *
 * @author BladeX
 */
public interface IMartialJudgeInviteService extends IService<MartialJudgeInvite> {

	/**
	 * 分页查询裁判邀请列表（关联裁判信息）
	 *
	 * @param judgeInvite 查询条件
	 * @param query 分页参数
	 * @return 裁判邀请VO分页列表
	 */
	IPage<MartialJudgeInviteVO> selectJudgeInvitePage(MartialJudgeInvite judgeInvite, Query query);

	/**
	 * 获取邀请统计信息
	 *
	 * @param competitionId 赛事ID
	 * @return 统计信息
	 */
	Map<String, Object> getInviteStatistics(Long competitionId);

	/**
	 * 生成邀请码
	 *
	 * @param dto 生成邀请码DTO
	 * @return 邀请记录
	 */
	MartialJudgeInvite generateInviteCode(GenerateInviteDTO dto);

	/**
	 * 批量生成邀请码
	 *
	 * @param dto 批量生成邀请码DTO
	 * @return 邀请记录列表
	 */
	List<MartialJudgeInvite> batchGenerateInviteCode(BatchGenerateInviteDTO dto);

	/**
	 * 重新生成邀请码
	 *
	 * @param inviteId 邀请记录ID
	 * @return 新的邀请记录
	 */
	MartialJudgeInvite regenerateInviteCode(Long inviteId);

	/**
	 * 生成唯一邀请码
	 *
	 * @return 邀请码
	 */
	String generateUniqueInviteCode();

}
