package com.lunhan.xxx.common;

import java.util.ArrayList;
import java.util.List;

/**
 * 分页结果
 * @author linliu
 * @date   2018-12-24
 * @param <T> 数据包数据类型
 */
public class PagerResult<T> {
    /**
     * 页大小(每页返回的记录条数)
     **/
    private Integer limit = 10;
    /**
     * 页号(第几页, 从1开始)
     **/
    private Integer page = 1;
    /**
     * 记录总条数
     **/
    private Number total = 0L;
    /**
     * 上一次请求最后一条数据的id
     *
     **/
    private Long lastId = 0L;
    /**
     * 数据包
     **/
    private List<T> list = new ArrayList<>();

    /**
     * 构造方法
     */
    public PagerResult() {

    }

    /**
     * 构造方法
     * @param limit 页大小(每页显示记录数)
     * @param page 页号(第几页, 从1开始)
     * @param total 记录总条数
     * @param list 数据包
     */
    public PagerResult(Integer limit, Integer page, Number total, List<T> list) {
        this.limit = limit;
        this.page = page;
        this.total = total;
        this.list = list;
    }

    public Integer getLimit() {
        return limit;
    }
    public void setLimit(Integer limit) {
        this.limit = limit;
    }

    public Integer getPage() {
        return page;
    }

    public void setPage(Integer page) {
        this.page = page;
    }

    public Long getTotal() {
        return total.longValue();
    }

    public void setTotal(Number total) {
        this.total = total;
    }

    public List<T> getList() {
        return list;
    }

    public void setList(List<T> list) {
        this.list = list;
    }

    public Long getLastId() {
        return lastId;
    }

    public void setLastId(Long lastId) {
        this.lastId = lastId;
    }

    /**
     * 总页数
     */
    public Long getTotalPage() {
        Long page = this.total.longValue() / this.limit;
        if(this.total.longValue() % this.limit != 0){
            page++;
        }
        return page;
    }

    /**
     * 是否还有上一页
     */
    public boolean getIsHasPrePage() {
        return this.getPage() > 1;
    }

    /**
     * 是否还有下一页
     */
    public boolean getIsHasNextPage() {
        return this.getPage() < this.getTotalPage().intValue();
    }
}