package org.springblade.modules.martial.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.martial.excel.ScheduleExportExcel;
import org.springblade.modules.martial.pojo.dto.MoveScheduleGroupDTO;
import org.springblade.modules.martial.pojo.dto.SaveScheduleDraftDTO;
import org.springblade.modules.martial.pojo.dto.ScheduleResultDTO;
import org.springblade.modules.martial.pojo.entity.MartialSchedule;

import java.util.List;

/**
 * Schedule 服务类
 *
 * @author BladeX
 */
public interface IMartialScheduleService extends IService<MartialSchedule> {

	/**
	 * Task 3.3: 导出赛程表
	 */
	List<ScheduleExportExcel> exportSchedule(Long competitionId);

	/**
	 * 获取赛程编排结果
	 * @param competitionId 赛事ID
	 * @return 赛程编排结果
	 */
	ScheduleResultDTO getScheduleResult(Long competitionId);

	/**
	 * 保存编排草稿
	 * @param dto 编排草稿数据
	 * @return 是否成功
	 */
	boolean saveDraftSchedule(SaveScheduleDraftDTO dto);

	/**
	 * 完成编排并锁定
	 * @param competitionId 赛事ID
	 * @return 是否成功
	 */
	boolean saveAndLockSchedule(Long competitionId);

	/**
	 * 移动赛程分组到指定场地和时间段
	 * @param dto 移动请求数据
	 * @return 是否成功
	 */
	boolean moveScheduleGroup(MoveScheduleGroupDTO dto);

	/**
	 * 获取调度数据
	 * @param competitionId 赛事ID
	 * @param venueId 场地ID
	 * @param timeSlotIndex 时间段索引
	 * @return 调度数据
	 */
	org.springblade.modules.martial.pojo.vo.DispatchDataVO getDispatchData(Long competitionId, Long venueId, Integer timeSlotIndex);

	/**
	 * 调整出场顺序
	 * @param dto 调整请求数据
	 * @return 是否成功
	 */
	boolean adjustOrder(org.springblade.modules.martial.pojo.dto.AdjustOrderDTO dto);

	/**
	 * 批量保存调度
	 * @param dto 保存调度数据
	 * @return 是否成功
	 */
	boolean saveDispatch(org.springblade.modules.martial.pojo.dto.SaveDispatchDTO dto);

}
