package com.seer.teach.teacher.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.seer.teach.teacher.module.entity.UnitKnowMappingEntity;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
 * <p>
 * 知识点映射表 服务类
 * </p>
 *
 * @author Lingma
 * @since 2025-11-05
 */
public interface UnitKnowMappingService extends IService<UnitKnowMappingEntity> {

    /**
     * Update the order of a knowledge point within a unit
     *
     * @param knowId Knowledge point ID
     * @param unitId Unit ID
     * @param order New order value
     * @return boolean indicating success or failure
     */
    boolean updateKnowledgePointOrder(Integer knowId, Integer unitId, Integer order);

    /**
     * Update the check status and score of a knowledge point within a unit
     *
     * @param knowId Knowledge point ID
     * @param unitId Unit ID
     * @param isChecked New check status value
     * @param score New score value
     * @return boolean indicating success or failure
     */
    boolean updateKnowledgePointCheckAndScore(Integer knowId, Integer unitId, Integer isChecked, BigDecimal score);

    /**
     * 根据单元ID列表获取单元知识点映射列表
     *
     * @param unitIds 单元ID列表
     * @return 单元知识点映射列表
     */
    Collection<UnitKnowMappingEntity> getListByUnitIds(Collection<Integer> unitIds);

    /**
     * 根据单元ID列表获取单元知识点映射列表
     *
     * @param unitId 单元ID
     * @return 单元知识点映射列表
     */
    Collection<UnitKnowMappingEntity> getListByUnitId(Integer unitId);

    /**
     * 根据单元id获取知识点Id列表
     *
     * @param unitId 单元ID
     * @return 知识点ID列表
     */
    Collection<Integer> getKnowIdListByUnitId(Integer unitId);

    /**
     * 根据单元ID列表获取知识点ID列表
     *
     * @param unitIds 单元ID列表
     * @return 知识点ID列表
     */
    Collection<Integer> getKnowIdListByUnitIds(Collection<Integer> unitIds);

    /**
     * 根据知识点ID列表获取知识点ID
     *
     * @param knowId 知识点ID
     * @return 单元ID
     */
    Integer getUnitIdByKnowId(Integer knowId);

    /**
     * 根据知识点ID列表获取知识点ID列表
     *
     * @param knowIds 知识点ID列表
     * @return 知识点ID列表
     */
    Collection<Integer> getUnitIdListByKnowIds(List<Integer> knowIds);

    /**
     * 根据知识点ID列表获取单元知识点映射列表
     *
     * @param knowIds 知识点ID列表
     * @return 单元知识点映射列表
     */
    Collection<UnitKnowMappingEntity> getListByKnowIds(List<Integer> knowIds);

    /**
     * 根据单元ID和知识点ID获取单元知识点映射
     *
     * @param unitId 单元ID
     * @param knowId 知识点ID
     * @return 单元知识点映射
     */
    UnitKnowMappingEntity getOneByUnitIdAndKnowId(Integer unitId, Integer knowId);
}