package com.seer.teach.admin.service;

import com.seer.teach.admin.request.UnitsQueryReq;
import com.seer.teach.admin.request.UnitsReq;
import com.seer.teach.admin.request.CheckAndScoreReq;
import com.seer.teach.admin.request.UnitMappingQueryReq;
import com.seer.teach.admin.response.AdminUnitsResp;
import com.seer.teach.admin.response.UnitGradeSubjectResp;
import com.seer.teach.admin.response.UnitMaterialInfoResp;
import com.seer.teach.common.PageListBean;

import jakarta.validation.constraints.NotNull;
import java.util.List;

/**
 * <p>
 * 单元管理服务接口
 * </p>
 *
 * @author ZS
 * @since 2025-10-23
 */
public interface AdminUnitsService {

    /**
     * 分页查询单元列表
     *
     * @param req 查询条件
     * @return 单元分页数据
     */
    PageListBean<AdminUnitsResp> getPageList(UnitsQueryReq req);

    /**
     * 根据ID获取单元详情
     *
     * @param id 单元ID
     * @return 单元详情
     */
    AdminUnitsResp getUnitDetailById(Integer id);

    /**
     * 创建单元
     *
     * @param req 单元信息
     * @return 是否创建成功
     */
    boolean createdUnits(UnitsReq req);

    /**
     * 删除单元
     *
     * @param id 单元ID
     * @return 是否删除成功
     */
    boolean deleteUnits(Integer id);

    /**
     * 更新单元
     *
     * @param id  单元ID
     * @param req 单元信息
     * @return 是否更新成功
     */
    boolean updateUnits(Integer id, UnitsReq req);

    /**
     * 更新单元检查状态和评分
     *
     * @param id  单元ID
     * @param req 检查状态和评分信息
     * @return 是否更新成功
     */
    boolean updateUnitsCheckAndScore(Integer id, CheckAndScoreReq req);

    /**
     * 批量更新单元检查状态
     *
     * @param ids ID列表
     * @param isChecked 检查状态
     * @return 是否更新成功
     */
    boolean batchUpdateUnitsCheck(List<Integer> ids, Integer isChecked);
    
    /**
     * 更新单元下所有知识点的示例题目的富文本
     *
     * @param id 单元ID
     * @param templateId 富文本模板ID
     * @return 是否更新成功
     */
    boolean updateExampleQuestionsHtml(Integer id, Integer templateId);
    
    /**
     * 根据单元ID获取年级和学科信息
     *
     * @param unitId 单元ID
     * @return 年级和学科信息
     */
    UnitGradeSubjectResp getUnitGradeAndSubject(Integer unitId);
    
    /**
     * 根据知识点ID获取对应的单元信息和教材版本信息
     *
     * @param req 查询参数，包含知识点ID和需要排除的单元ID
     * @return 单元信息和教材版本信息
     */
    List<UnitMaterialInfoResp> getUnitMaterialInfo(UnitMappingQueryReq req);

    /**
     * 根据单元ID获取教材信息
     *
     * @param id 单元ID
     * @return 教材信息
     */
    List<UnitMaterialInfoResp> getMaterialInfo(Integer id);
}