package org.jeecg.modules.adweb.common.util;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.modules.adweb.common.constant.NumConstant;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;


public final class ListUtil {

    /**
     * 判断集合是否为空
     *
     * @param list
     * @return
     */
    public static boolean isEmpty(List list) {
        if (list != null && list.size() != 0) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * 判断集合是否不为空
     *
     * @param list
     * @return
     */
    public static boolean notEmpty(List list) {
        if (list != null && list.size() != 0) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 返回集合大小
     *
     * @param list
     * @return
     */
    public static int returnSize(List list) {
        if (notEmpty(list)) {
            return list.size();
        } else {
            return NumConstant.ZERO;
        }
    }

    /**
     * @param list 原集合
     * @param str  符号
     * @return java.lang.String
     * @author 汤星鹏
     * @Description 集合转字符串
     * @date 2019/8/26 11:50
     */
    public static String listToString(List list, String str) {
        if (ListUtil.notEmpty(list)) {
            return list.stream().map(l->l.toString()).collect(Collectors.joining(str)).toString();
        } else {
            return null;
        }
    }

    /**
     * 将String类型的结合转Long类型
     *
     * @param list
     * @return
     */
    public static List<Long> stringToLong(List<String> list) {

        if (ListUtil.notEmpty(list)) {
            List<Long> longList = new ArrayList<>();
            list.forEach(l -> {
                if (StringUtils.isNotBlank(l)) {
                    longList.add(Long.parseLong(l));
                }
            });
            return longList;
        } else {
            return new ArrayList<>();
        }
    }

    /**
     * @param list  集合
     * @param index 下标
     * @return java.lang.Object
     * @author 汤星鹏
     * @Description 获取对应下标对象
     * @date 2019/11/5 9:31
     */
    public static <T> T listGetIndex(List<T> list, Integer index) {
        if (ListUtil.notEmpty(list)) {
            return list.get(index);
        }
        return null;
    }

    /**
     * @param list 集合
     * @return java.lang.Object
     * @author 汤星鹏
     * @Description 获取下标为o对应对象
     * @date 2019/11/5 9:33
     */
    public static <T> T listGetZero(List<T> list) {
        return listGetIndex(list, NumConstant.ZERO);
    }

    /**
     * @param list
     * @return java.util.List<T>
     * @author 汤星鹏
     * @Description 集合去重
     * @date 2019/11/11 14:47
     */
    public static <T> List<T> distinct(List<T> list) {
        if (notEmpty(list)) {
            return list.stream().distinct().collect(Collectors.toList());
        }
        return null;
    }

    /**
     * 分页函数
     * @author pochettino
     * @param currentPage   当前页数
     * @param pageSize  每一页的数据条数
     * @param list  要进行分页的数据列表
     * @return  当前页要展示的数据
     */
    public static Page getPages(Integer currentPage, Integer pageSize, List list) {
        Page page = new Page();
        if(list==null){
            return  null;
        }
        int size = list.size();

        if(pageSize > size) {
            pageSize = size;
        }
        if (pageSize!=0){
            // 求出最大页数，防止currentPage越界
            int maxPage = size % pageSize == 0 ? size / pageSize : size / pageSize + 1;

            if(currentPage > maxPage) {
                currentPage = maxPage;
            }
        }
        // 当前页第一条数据的下标
        int curIdx = currentPage > 1 ? (currentPage - 1) * pageSize : 0;

        List pageList = new ArrayList();

        // 将当前页的数据放进pageList
        for(int i = 0; i < pageSize && curIdx + i < size; i++) {
            pageList.add(list.get(curIdx + i));
        }

        page.setCurrent(currentPage).setSize(pageSize).setTotal(list.size()).setRecords(pageList);
        return page;
    }
}
