package com.seer.teach.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.seer.teach.admin.request.AddKnowledgePointUnitMappingReq;
import com.seer.teach.admin.request.KnowledgePointsPageQueryReq;
import com.seer.teach.admin.request.KnowledgePointsReq;
import com.seer.teach.admin.request.CheckAndScoreReq;
import com.seer.teach.admin.response.KnowledgePointsResp;

import java.util.List;

/**
 * <p>
 * 知识点管理服务接口
 * </p>
 *
 * @author ZS
 * @since 2025-10-24
 */
public interface AdminKnowledgePointsService {

    /**
     * 分页查询知识点列表
     *
     * @param req 查询条件
     * @return 知识点分页数据
     */
    IPage<KnowledgePointsResp> pageKnowledgePoints(KnowledgePointsPageQueryReq req);

    /**
     * 根据单元ID获取知识点列表
     *
     * @param unitId 单元ID
     * @param req 查询条件
     * @return 知识点列表
     */
    List<KnowledgePointsResp> getKnowledgePointsByUnitId(Integer unitId, KnowledgePointsPageQueryReq req);

    /**
     * 根据ID获取知识点详情
     *
     * @param id 知识点ID
     * @return 知识点实体
     */
    KnowledgePointsResp getKnowledgePointById(Integer id);

    /**
     * 添加知识点
     *
     * @param req 知识点信息
     * @return 是否添加成功
     */
    boolean addKnowledgePoint(KnowledgePointsReq req);

    /**
     * 更新知识点信息
     *
     * @param id  知识点ID
     * @param req 知识点信息
     * @return 是否更新成功
     */
    boolean updateKnowledgePoint(Integer id, KnowledgePointsReq req);

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

    /**
     * 批量更新知识点检查状态
     *
     * @param ids ID列表
     * @param unitId 单元Id
     * @param isChecked 检查状态
     * @return 是否更新成功
     */
    boolean batchUpdateKnowledgePointCheck(List<Integer> ids, Integer unitId,Integer isChecked);

    /**
     * 删除知识点
     *
     * @param id 知识点ID
     * @param unitId 单元ID
     * @return 是否删除成功
     */
    boolean deleteKnowledgePoint(Integer id,Integer unitId);

    /**
     * 根据单元ID和知识点ID获取知识点详情
     *
     * @param unitId 单元ID
     * @param knowId 知识点ID
     * @return 知识点实体
     */
    KnowledgePointsResp getKnowledgePointByUnitIdAndKnowId(Integer unitId, Integer knowId);
}