package helper

import (
	"strconv"
	"time"
)

func FormatDateTime(str string) string {
	date, err := strconv.ParseInt(str, 10, 64)
	if err != nil {
		return ""
	}
	return time.Unix(date, 0).Format("2006-01-02 15:04:05")
}
func FormatDate(str string) string {
	date, err := strconv.ParseInt(str, 10, 64)
	if err != nil {
		return ""
	}
	return time.Unix(date, 0).Format("2006-01-02")
}

// 获取当天开始时间戳
func GetTodayStartTimeStamp() int64 {

	var reserveTime time.Time
	// loc, _ := time.LoadLocation(time.Location.String())

	date := time.Now().Format("2006-01-02")
	reserveTime, _ = time.ParseInLocation("2006-01-02", date, time.Local)
	return reserveTime.Unix()
}

// 获取当天结束时间戳
func GetTodayEndTimeStamp() int64 {

	var reserveTime time.Time
	// loc, _ := time.LoadLocation("Asia/Shanghai")

	date := time.Now().Format("2006-01-02")
	reserveTime, _ = time.ParseInLocation("2006-01-02 15:04:05", date+" 23:59:59", time.Local)
	return reserveTime.Unix()
}

// 获取本周开始时间戳
func GetWeekStartTimeStamp() int64 {

	var reserveTime time.Time
	now := time.Now()
	loc, _ := time.LoadLocation("Asia/Shanghai")

	offset := int(time.Monday - now.Weekday())
	if offset > 0 {
		offset = -6
	}

	weekStartDate := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset)
	weekMonday := weekStartDate.Format("2006-01-02")

	reserveTime, _ = time.ParseInLocation("2006-01-02", weekMonday, loc)
	return reserveTime.Unix()
}

// 获取当月开始时间戳
func GetMonthStartTimeStamp() int64 {

	var reserveTime time.Time
	loc, _ := time.LoadLocation("Asia/Shanghai")

	date := time.Now().Format("2006-01")
	reserveTime, _ = time.ParseInLocation("2006-01", date, loc)
	return reserveTime.Unix()
}

// RFC3339ToCSTLayout convert rfc3339 value to china standard time layout
func RFC3339ToCSTLayout(value string) (string, error) {
	var (
		cst *time.Location
	)

	var err error
	if cst, err = time.LoadLocation("Asia/Shanghai"); err != nil {
		panic(err)
	}

	ts, err := time.Parse(time.RFC3339, value)
	if err != nil {
		return "", err
	}

	return ts.In(cst).Format("2006-01-02 15:04:05"), nil
}

// 具体日期时间转时间戳
func DatetimeToUnix(value string) int64 {
	loc, _ := time.LoadLocation("Asia/Shanghai")

	reserveTime, _ := time.ParseInLocation("2006-01-02 15:04:05", value, loc)

	return reserveTime.Unix()
}