package cn.meowrain.aioj.backend.question.service;

import cn.meowrain.aioj.backend.question.dao.entity.Question;
import cn.meowrain.aioj.backend.question.dto.req.QuestionCreateRequestDTO;
import cn.meowrain.aioj.backend.question.dto.req.QuestionQueryRequestDTO;
import cn.meowrain.aioj.backend.question.dto.req.QuestionUpdateRequestDTO;
import cn.meowrain.aioj.backend.question.dto.resp.QuestionResponseDTO;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 题目服务接口
 */
public interface QuestionService extends IService<Question> {

	/**
	 * 创建题目（使用责任链校验）
	 * @param requestDTO 题目创建请求DTO
	 * @return 题目ID
	 */
	Long createQuestionWithChain(QuestionCreateRequestDTO requestDTO);

	/**
	 * 更新题目（使用责任链校验）
	 * @param questionId 题目ID
	 * @param requestDTO 题目编辑请求DTO
	 * @return 是否成功
	 */
	Boolean updateQuestionWithChain(Long questionId, cn.meowrain.aioj.backend.question.dto.req.QuestionEditRequestDTO requestDTO);

	/**
	 * 创建题目
	 * @param question 题目信息
	 * @return 题目ID
	 */
	Long createQuestion(Question question);

	/**
	 * 更新题目
	 * @param question 题目信息
	 * @return 是否成功
	 */
	Boolean updateQuestion(Question question);

	/**
	 * 删除题目
	 * @param questionId 题目ID
	 * @return 是否成功
	 */
	Boolean deleteQuestion(Long questionId);

	/**
	 * 根据ID获取题目详情
	 * @param questionId 题目ID
	 * @return 题目详情
	 */
	QuestionResponseDTO getQuestionById(Long questionId);

	/**
	 * 根据ID获取题目详情（内部接口）
	 * @param questionId 题目ID
	 * @return 题目详情
	 */
	Question getQuestionByIdInner(Long questionId);

	/**
	 * 分页查询题目列表
	 * @param request 查询条件
	 * @return 题目分页列表
	 */
	Page<QuestionResponseDTO> listQuestions(QuestionQueryRequestDTO request);
}
