package com.njcn.rdms.module.system.dal.mysql.notice;

import com.njcn.rdms.framework.common.pojo.PageResult;
import com.njcn.rdms.framework.mybatis.core.mapper.BaseMapperX;
import com.njcn.rdms.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.njcn.rdms.module.system.controller.admin.notice.vo.NoticePageReqVO;
import com.njcn.rdms.module.system.dal.dataobject.notice.NoticeDO;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface NoticeMapper extends BaseMapperX<NoticeDO> {

    default PageResult<NoticeDO> selectPage(NoticePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<NoticeDO>()
                .likeIfPresent(NoticeDO::getTitle, reqVO.getTitle())
                .eqIfPresent(NoticeDO::getStatus, reqVO.getStatus())
                .orderByDesc(NoticeDO::getId));
    }

    /**
     * 查询最近 N 条公告：仅 status 正常（CommonStatusEnum.ENABLE=0），可按 type 过滤，按 id 倒序取 size 条。
     * type 为 null 时不过滤类型；type 动态透传，不做代码侧白名单校验。
     */
    default java.util.List<NoticeDO> selectRecentList(Integer size, Integer type) {
        int limit = (size == null || size <= 0) ? 3 : size;
        return selectList(new LambdaQueryWrapperX<NoticeDO>()
                .eq(NoticeDO::getStatus, com.njcn.rdms.framework.common.enums.CommonStatusEnum.ENABLE.getStatus())
                .eqIfPresent(NoticeDO::getType, type)
                .orderByDesc(NoticeDO::getId)
                .last("LIMIT " + limit));
    }

}
