package cn.iocoder.yudao.framework.common.util.time;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

@Slf4j
public class TimeUtil {

	public final static long ONE_MINUTE = 60;

	public final static long TWO_MINUTE = 120;

	public final static long ONE_DAY = 86400;
	/**
	 * 根据传进来的字符串转为秒
	 * @param dateStr（字符串格式如："2014-01-01"）
	 * @return 格式不对返回null，正确的返回Integer
	 */
	public static Integer dateStr2Integer(String dateStr) {
		if(StringUtils.isBlank(dateStr)) {
			return null;
		}
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		try {
			int ss = (int) (format.parse(dateStr).getTime() / 1000);
			return ss;
		} catch(Exception e) {
			log.error("时间转换发生错误: ", e);
		}
		return null;
	}

	/***
	 * 根据传进来的字符串转为秒
	 * @param timeStr（字符串格式如："2014-01-01 13:00:00"）
	 * @param strFormat（转换格式如："yyyy-MM-dd HH:mm:ss"）
	 * @return 格式不对返回null，正确的返回Integer
	 */
	public static Integer timeStr2Integer(String timeStr, String strFormat) {
		if(StringUtils.isBlank(timeStr)) {
			return null;
		}
		SimpleDateFormat format = new SimpleDateFormat(strFormat);
		try {
			int ss = (int) (format.parse(timeStr).getTime() / 1000);
			return ss;
		} catch(Exception e) {
			log.error("时间转换发生错误: ", e);
		}
		return null;
	}

	/**
	 * 当前时间戳
	 * @return
	 */
	public static Long getTimestamp(){
		return (System.currentTimeMillis() / 1000);
	}

	/**
	 * 获取当前日期，年月日 如 ： 20140101
	 * @return 如： 20140101
	 */
	public static String getYearMonthDay(){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		return format.format(new Date());
	}
	public static long getNextMinuteTimestamp(){
		long tv = getTimestamp();
		long nextTv = tv - (tv % ONE_MINUTE) + ONE_MINUTE;
		if (tv % ONE_MINUTE  == 0){
			nextTv -= ONE_MINUTE;
		}
		return nextTv;
	}

	public static long getMinuteTimestamp(){
		long tv = getTimestamp();
		long nextTv = tv - (tv % ONE_MINUTE);
		return nextTv;
	}
	/***
	 * 根据传进来的字符串转为秒
	 * @param dateStr   日期字符串，如： "2014-01-01 13:05:32"
	 * @param strFormat 日期字符串格式，如 "yyyy-MM-dd HH:mm:ss"
	 * @return 格式不对返回null ， 正确的返回秒数。Integer
	 */
	public static Long dateStrToInteger(String dateStr, String strFormat){
		if(dateStr == null || "".equals(dateStr.trim())){
			return null;
		}
		SimpleDateFormat format = new SimpleDateFormat(strFormat);
		try{
			Long ss = (format.parse(dateStr).getTime() / 1000);
			return ss;
		}catch (Exception e){
			log.error("时间转换发生错误: ", e);
		}
		return 0L;
	}

	public static String getDateStr(Long dataTime){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar c = Calendar.getInstance();
		long millions=new Long(dataTime).longValue()*1000;
		c.setTimeInMillis(millions);
		String dateStr = format.format(c.getTime());
		return dateStr;
	}

	public static Integer getDateStr(Date dataTime){
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		try{
			int ss = (int) (dataTime.getTime() / 1000);
			return ss;
		}catch (Exception e){
			log.error("时间转换发生错误: ", e);
		}
		return null;
	}

}
