package xtools.boot.db.mybatisplus.utils;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import xtools.base.config.BaseParams;
import xtools.core.ArrUtils;

import java.time.Instant;
import java.util.Objects;

/**
 * <p>Title : QueryUtils</p>
 * <p>Description : QueryUtils</p>
 * <p>DevelopTools : Idea_x64_v2026.1</p>
 * <p>DevelopSystem : macOS Sequoia 15.7.5</p>
 * <p>Company : org.xujun</p>
 *
 * @author : XuJun
 * @version : 5.0.0
 * @date : 2026/1/17 19:16
 */
public class QueryUtils implements BaseParams {

    /**
     * 添加时间范围查询
     *
     * @param query     查询条件
     * @param timeRange 时间范围
     * @param timeField 时间字段
     * @param <T>       泛型
     */
    public static <T> void addTimeRange(LambdaQueryWrapper<T> query, Instant[] timeRange, SFunction<T, ?> timeField) {
        if (ArrUtils.isEmpty(timeRange) || timeRange.length != CP_NUM2) {
            return;
        }
        query.ge(Objects.nonNull(timeRange[CP_NUM0]), timeField, timeRange[CP_NUM0]);
        query.le(Objects.nonNull(timeRange[CP_NUM1]), timeField, timeRange[CP_NUM1]);
    }

    /**
     * 获取分页条件
     *
     * @param currentPage 当前页
     * @param pageSize    页面大小
     * @param <T>         泛型
     * @return 分页条件
     */
    public static <T> Page<T> getPage(Integer currentPage, Integer pageSize) {
        if (Objects.isNull(currentPage) || currentPage < CP_NUM1) {
            currentPage = CP_NUM1;
        }
        if (Objects.isNull(pageSize) || pageSize < CP_NUM1) {
            pageSize = CP_NUM10;
        }
        return new Page<>(currentPage, pageSize);
    }

}
