package com.cf.imes.framework.aop;

import cn.hutool.core.util.ArrayUtil;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;

import java.beans.PropertyEditorSupport;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * controller解析器
 *
 * @author Gqr
 * @since 2024/12/2 10:05
 */
@ControllerAdvice
public class ControllerResolver {
    private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @InitBinder
    public void initBinder(WebDataBinder webDataBinder) {
        /**
         * 时间数组解析器：只适用get请求
         * 当出现以下情况产生改变：
         * 1、传入年月日时分秒完全相同，第一个时间改为当天的0点0分0秒
         * 2、当第二个时间小于第一个时间，第一个时间改为当天的0点0分0秒
         */
        webDataBinder.registerCustomEditor(LocalDateTime[].class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String text) throws IllegalArgumentException {
                String[] split = text.split(",");
                if (ArrayUtil.isNotEmpty(split) && split.length == 2) {
                    LocalDateTime startTime = LocalDateTime.parse(split[0], FORMATTER);
                    LocalDateTime endTime = LocalDateTime.parse(split[1], FORMATTER);
                    // 比较时间
                    if (startTime.isEqual(endTime) || startTime.isAfter(endTime)) {
                        startTime = startTime.withHour(0).withMinute(0).withSecond(0);
                    }
                    setValue(new LocalDateTime[]{startTime, endTime});
                }
            }
        });
    }
}