package com.ltgk.catches.domain.dto;


import cn.hutool.core.date.DateUtil;
import io.swagger.annotations.ApiParam;
import lombok.Data;

import java.util.Date;

/**
 * 时间范围请求参数对象
 * -- 两种查询方式，1. 根据 timeInterval 进行查询；2. 给定 startTime 和 endTime 来进行查询
 * -- timeInterval 和 startTime / endTime 不能共存
 * -- timeInterval: 可选 day - 当天; week - 当前周; month - 当前月
 *
 * @author Qi ChengBin
 * @date 2025/01/08 14:49:48
 */
@Data
public class TimeFrameReq {

    @ApiParam("查询范围(day-当天；week-当前周；month-当前月)")
    private String timeInterval;

    @ApiParam("开始时间；；不得和查询范围共存")
    private String startTime;

    @ApiParam("结束时间；；不得和查询范围共存")
    private String endTime;

    public void setTimeInterval(String timeInterval) {
        this.timeInterval = timeInterval;
        // 获取当前的开始和结束
        if ("day".equals(timeInterval)) {
            this.startTime = DateUtil.format(DateUtil.beginOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
            this.endTime = DateUtil.format(DateUtil.endOfDay(new Date()), "yyyy-MM-dd HH:mm:ss");
        }
        // 获取当前周所在的开始和结束
        if ("week".equals(timeInterval)) {
            this.startTime = DateUtil.format(DateUtil.beginOfWeek(new Date()), "yyyy-MM-dd HH:mm:ss");
            this.endTime = DateUtil.format(DateUtil.endOfWeek(new Date()), "yyyy-MM-dd HH:mm:ss");
        }
        // 获取当前月所在的开始和结束
        if ("month".equals(timeInterval)) {
            this.startTime = DateUtil.format(DateUtil.beginOfMonth(new Date()), "yyyy-MM-dd HH:mm:ss");
            this.endTime = DateUtil.format(DateUtil.endOfMonth(new Date()), "yyyy-MM-dd HH:mm:ss");
        }
    }
}
