package com.yuchen.saas.park.service.util;

import com.fasterxml.jackson.databind.ObjectMapper;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author 刘通
 * @date 2020/12/23 10:33
 */
public class ObjectUtils {

//    public static void main(String[] args) throws ParseException {
//        SimpleDateFormat format = new SimpleDateFormat("HH:mm");
//
//        // 定义第一个时间段
//        Date start1 = format.parse("23:00");
//        Date end1 = format.parse("20:00");
//
//        // 定义第二个时间段
//        Date start2 = format.parse("18:00");
//        Date end2 = format.parse("20:00");
//
//        // 判断两个时间段是否有重叠
//        if (start1.before(end1) && start2.before(end2)) {
//            // 2个时间段都不跨天
//            if (end1.after(start2) && start1.before(end2)) {
//                System.out.println("时间段重叠。");
//            } else {
//                System.out.println("时间段不重叠。");
//            }
//        } else if (start1.after(end1) && start2.after(end2)) {
//            // 如果2个时间段都跨天，那么它们一定重叠
//            System.out.println("时间段重叠了。");
//        } else if (start1.after(end1) || start2.before(end2)) {
//            // 第一个时间跨天
//            if (start2.before(start1) && start2.before(end1)) {
//                System.out.println("时间段重叠了。");
//            } else {
//                System.out.println("时间段不重叠。");
//            }
//        } else if (start1.before(end1) || start2.after(end2)) {
//            // 第二个时间跨天
//            if (start1.before(start2) && start1.before(end2)) {
//                System.out.println("时间段重叠了。");
//            } else {
//                System.out.println("时间段不重叠。");
//            }
//        }
//
//    }
    /**
     * object to List
     * @param obj
     * @param cla
     * @param <T>
     * @return
     */
    public static <T> List<T> objToList(Object obj, Class<T> cla){
        List<T> list = new ArrayList<T>();
        if (obj instanceof ArrayList<?>) {
            for (Object o : (List<?>) obj) {
                list.add(cla.cast(o));
            }
            return list;
        }
        return null;
    }

    /**
     * object to map
     * @param obj
     * @param cla
     * @param <T>
     * @return
     */
    public static <T> Map<T, T> objectToMap(Object obj, Class<T> cla) {
        return (Map<T, T>)obj;
    }

    /**
     * object to bean
     * @param obj
     * @param cla
     * @return
     */
    public static <T> T objectToBean(Object obj, Class<T> cla) {
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.convertValue(obj, cla);
    }
}
