package org.springblade.modules.martial.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.martial.excel.AthleteExportExcel;
import org.springblade.modules.martial.pojo.entity.MartialAthlete;
import org.springblade.modules.martial.pojo.vo.MartialAthleteVO;
import org.springblade.modules.martial.pojo.vo.MiniAthleteAdminVO;
import org.springblade.modules.martial.pojo.vo.MiniAthleteScoreVO;

import java.util.List;

/**
 * Athlete 服务类
 *
 * @author BladeX
 */
public interface IMartialAthleteService extends IService<MartialAthlete> {

	/**
	 * 分页查询参赛选手（包含关联字段）
	 *
	 * @param page 分页对象
	 * @param athlete 查询条件
	 * @return 参赛选手VO分页数据
	 */
	IPage<MartialAthleteVO> selectAthleteVOPage(IPage<MartialAthleteVO> page, MartialAthlete athlete);

	/**
	 * Task 2.1: 运动员签到
	 */
	void checkIn(Long athleteId, Long scheduleId);

	/**
	 * Task 2.1: 完成比赛
	 */
	void completePerformance(Long athleteId, Long scheduleId);

	/**
	 * Task 2.6: 更新比赛状态（带流程验证）
	 */
	void updateCompetitionStatus(Long athleteId, Integer status);

	/**
	 * Task 3.2: 导出运动员名单
	 */
	List<AthleteExportExcel> exportAthletes(Long competitionId);

	/**
	 * 小程序接口：获取选手列表（普通评委）
	 *
	 * @param judgeId 评委ID
	 * @param venueId 场地ID
	 * @param projectId 项目ID
	 * @return 选手列表（含我的评分）
	 */
	List<MiniAthleteScoreVO> getAthletesWithMyScore(Long judgeId, Long venueId, Long projectId);

	/**
	 * 小程序接口：获取选手列表（主裁判）
	 *
	 * @param competitionId 比赛ID
	 * @param venueId 场地ID
	 * @param projectId 项目ID
	 * @return 选手列表（含评分统计）
	 */
	List<MiniAthleteAdminVO> getAthletesForAdmin(Long competitionId, Long venueId, Long projectId);

}
