package org.dromara.zhishu.util;


import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * 文件处理工具类
 *
 * @author Lion Li
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DateUtilsUtils {

    public static String getNowDate() {
        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();

        // 自定义日期时间格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 格式化日期和时间
        String formattedDateTime = now.format(formatter);

        return formattedDateTime;
    }

    /**
     * 根据传入的几个月，获取几个月后的当前时间
     *
     * @param months 月份数量
     * @return 几个月后的日期时间，Date类型
     */
    public static Date getNextMonths(int months) {
        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();

        // 获取几个月后的日期和时间
        LocalDateTime futureMonth = now.plusMonths(months);

        // 转换为Date类型
        return Date.from(futureMonth.atZone(java.time.ZoneId.systemDefault()).toInstant());
    }

    /**
     * 获取偏移天数的当前时间，格式为 yyyy-MM-dd HH:mm:ss
     *
     * @param dayOffset 天数偏移量
     *                  0：当前时间
     *                  1：当前时间 + 30天
     *                  -1：当前时间 - 30天
     * @return 格式化后的日期时间字符串
     */
    public static String getDateTimeWithOffset(int dayOffset) {
        // 获取当前日期和时间
        LocalDateTime now = LocalDateTime.now();

        // 计算偏移天数（乘以30）
        int offsetDays = dayOffset * 30;

        // 根据偏移量调整日期
        LocalDateTime targetDateTime = now.plusDays(offsetDays);

        // 自定义日期时间格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

        // 格式化日期和时间
        return targetDateTime.format(formatter);
    }


    /**
     * 将日期字符串（格式：yyyy-MM-dd HH:mm:ss）转换为10位时间戳（秒级）
     * 支持自定义格式
     *
     * @param dateTimeStr 日期时间字符串
     * @param pattern 日期时间格式，例如 "yyyy-MM-dd HH:mm:ss"
     * @return 10位时间戳（秒数），如果转换失败返回0
     */
    public static long dateStringToTimestamp10(String dateTimeStr, String pattern) {
        if (dateTimeStr == null || dateTimeStr.trim().isEmpty() || pattern == null) {
            return 0;
        }

        try {
            // 定义日期时间格式
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            // 将字符串解析为LocalDateTime
            LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, formatter);
            // 转换为时间戳（秒级）
            return localDateTime.atZone(ZoneId.systemDefault()).toEpochSecond();
        } catch (Exception e) {
            // 日志记录异常，可根据需要处理
            return 0;
        }
    }
}
