package cn.iocoder.byzs.module.aicourse.dal.mysql.aiCourseType;

import cn.iocoder.byzs.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.byzs.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.byzs.module.aicourse.controller.admin.aiCourseType.vo.AiCourseTypeListReqVO;
import cn.iocoder.byzs.module.aicourse.dal.dataobject.aiCourseType.AiCourseTypeDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 课程-类型 Mapper
 *
 * @author lyb
 */
@Mapper
public interface AiCourseTypeMapper extends BaseMapperX<AiCourseTypeDO> {

    default List<AiCourseTypeDO> selectList(AiCourseTypeListReqVO reqVO) {
        LambdaQueryWrapperX<AiCourseTypeDO> queryWrapper = getAiCourseTypeDOLambdaQueryWrapperX(reqVO);

        // 使用BaseMapperX的selectList方法执行查询
        return selectList(queryWrapper);
    }

    default List<AiCourseTypeDO> selectSimpleList(AiCourseTypeListReqVO reqVO) {
        LambdaQueryWrapperX<AiCourseTypeDO> queryWrapper = getAiCourseTypeDOLambdaQueryWrapperX(reqVO);

        // 使用BaseMapperX的selectList方法执行查询
        return selectList(queryWrapper.select(AiCourseTypeDO::getId, AiCourseTypeDO::getCtParentId, AiCourseTypeDO::getCtType, AiCourseTypeDO::getCtTypeNode, AiCourseTypeDO::getCtTypeSort));
    }

    private static LambdaQueryWrapperX<AiCourseTypeDO> getAiCourseTypeDOLambdaQueryWrapperX(AiCourseTypeListReqVO reqVO) {
        LambdaQueryWrapperX<AiCourseTypeDO> queryWrapper = new LambdaQueryWrapperX<AiCourseTypeDO>()
                .likeIfPresent(AiCourseTypeDO::getCtType, reqVO.getCtType())
                .eqIfPresent(AiCourseTypeDO::getCtParentId, reqVO.getCtParentId());

        // 处理getCtTypeNode的特殊条件：不为空且不等于0时，同时查询该值和0
        Object ctTypeNode = reqVO.getCtTypeNode();
        if (ctTypeNode != null && !ctTypeNode.toString().equals("0")) {
            queryWrapper.and(wrapper -> wrapper
                    .eq(AiCourseTypeDO::getCtTypeNode, ctTypeNode)
                    .or()
                    .eq(AiCourseTypeDO::getCtTypeNode, 0)
            );
        } else {
            // 保持原有的eqIfPresent行为
            queryWrapper.eqIfPresent(AiCourseTypeDO::getCtTypeNode, ctTypeNode);
        }

        // 完成构建queryWrapper并添加剩余条件
        queryWrapper
                .likeIfPresent(AiCourseTypeDO::getCtTypeDescribe, reqVO.getCtTypeDescribe())
                .orderByAsc(AiCourseTypeDO::getCtTypeNode, AiCourseTypeDO::getCtTypeSort);
        return queryWrapper;
    }

	default AiCourseTypeDO selectByCtParentIdAndCtType(Long ctParentId, String ctType) {
	    return selectOne(AiCourseTypeDO::getCtParentId, ctParentId, AiCourseTypeDO::getCtType, ctType);
	}

    default Long selectCountByCtParentId(Long ctParentId) {
        return selectCount(AiCourseTypeDO::getCtParentId, ctParentId);
    }

}