package com.tofly.feesapi.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeParseException;
import java.util.Date;

public class DateUtils {

    private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static boolean isValidDateFormat(String dateString) {
        try {
            LocalDate.parse(dateString);
            return true;
        } catch (DateTimeParseException e) {
            return false;
        }
    }

    /**
     * 将日期字符串按照指定格式转换成另一个格式的字符串
     *
     * @param dateStr      日期字符串
     * @param srcFormat    原日期格式
     * @param targetFormat 目标日期格式
     * @return 转换后的日期字符串
     */
    public static String formatDate(String dateStr, String srcFormat, String targetFormat) {
        SimpleDateFormat srcSdf = new SimpleDateFormat(srcFormat);
        SimpleDateFormat targetSdf = new SimpleDateFormat(targetFormat);
        Date date;
        try {
            date = srcSdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
        return targetSdf.format(date);
    }

    /**
     * 将日期字符串按照指定格式转换成另一个格式的字符串
     *
     * @param date      日期字符串
     * @param srcFormat 原日期格式
     * @return 转换后的日期字符串
     */
    public static String formatDate(Date date, String srcFormat) {
        SimpleDateFormat srcSdf = new SimpleDateFormat(srcFormat);
        String formattedDate = srcSdf.format(date);
        return formattedDate;
    }

    /**
     * 将日期转换为默认格式的字符串
     *
     * @param date 日期
     * @return 格式化后的字符串
     */
    public static String formatDate(Date date) {
        return formatDate(date, DEFAULT_PATTERN);
    }

    /**
     * 将日期转换为指定格式的字符串
     *
     * @param date    日期
     * @param pattern 格式
     * @return 格式化后的字符串
     */
    public static String formatDate_pattern(Date date, String pattern) {
        if (date == null) {
            return "";
        }
        DateFormat dateFormat = new SimpleDateFormat(pattern);
        return dateFormat.format(date);
    }

    /**
     * 计算两个日期的相差秒数
     *
     * @param dateBegin 开始时间
     * @param dateEnd   结束时间
     * @return 秒数差值（结束时间-开始时间）
     */
    public static double getSecond(Date dateBegin, Date dateEnd) {
        long timeValue = getMillisecond(dateBegin, dateEnd);
        return timeValue / 1000.0;
    }

    /**
     * 计算两个日期的相差毫秒数
     *
     * @param dateBegin 开始时间
     * @param dateEnd   结束时间
     * @return 毫秒数值（结束时间-开始时间）
     */
    public static long getMillisecond(Date dateBegin, Date dateEnd) {
        long timeValue = dateEnd.getTime() - dateBegin.getTime();
        return timeValue;
    }

    public static Date convertLDTToDate(LocalDateTime time) {
        return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
    }
}
