package com.wms.entity.app.request;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.wms.utils.StringUtils;
import lombok.Data;

/**
 * 分页查询
 */
@Data
public class PageQuery {
    /**
     * 页码
     */
    @JsonProperty("pageNo")
    private Long pageNo = 1L;
    /**
     * 每页行数
     */
    @JsonProperty("pageSize")
    private Long pageSize = 10L;
    /**
     * 排序字段
     */
    @JsonProperty("sortBy")
    private String sortBy;
    /**
     * 是否升序
     */
    @JsonProperty("isAsc")
    private Boolean isAsc = true;
    /**
     * 请求用户名
     */
    @JsonProperty("userName")
    private String userName;

    /**
     * 将前端查询转换为数据库查询可用的分页查询
     * @param orderItems 排序字段
     * @return 分页查询
     * @param <PO> 实体类PO
     */
    public <PO> Page<PO> toMpPage(OrderItem ... orderItems){
        Page<PO> page = Page.of(pageNo, pageSize);
        if (StringUtils.isNotEmpty(sortBy)) {
            page.addOrder(new OrderItem().setColumn(sortBy).setAsc(isAsc));
        } else {
            page.addOrder(orderItems);
        }
        return page;
    }

    /**
     * 传入 默认排序字段的转换
     * @param defaultSortValue 默认查询
     * @param isAsc 排序方式
     * @return 分页查询
     * @param <PO> 实体类
     */
    public <PO> Page<PO> toMpPage(String defaultSortValue, Boolean isAsc){
        return toMpPage(new OrderItem().setColumn(defaultSortValue).setAsc(isAsc));
    }
}
