package helper

import (
	"fmt"
	"time"
)

const (
	DefaultParseFormatLayout = "2006-1-02 15:04:05"  // 默认解析时间格式
	DefaultFormatLayout      = "2006-01-02 15:04:05" // 默认时间格式
)

func Parse(localTimeStr string) (time.Time, error) {
	if localTimeStr == "" {
		return time.Time{}, fmt.Errorf("时间参数未传递")
	}
	layouts := []string{
		DefaultParseFormatLayout,
		DefaultFormatLayout,
		"2006-01-02 15:04",
		"2006-1-02 15:04",
		"2006-01-02",
		"2006-1-02",
		time.RFC3339Nano,
	}
	var (
		localTime time.Time
		err       error
	)
	loc, _ := time.LoadLocation(GetTimeZone())
	for _, layout := range layouts {
		localTime, err = time.ParseInLocation(layout, localTimeStr, loc)
		if err == nil {
			break
		}
	}
	if err != nil {
		return time.Time{}, fmt.Errorf("时间转换错误:%v", err)
	}

	return localTime, nil
}

// Duration [微信]方24小时内未完成验证,自动关闭批次单,24小时后,不再触发查询了
// [我方]不管什么渠道,首次间隔5s查询,第二次后间隔5s,第三次间隔10s,大于2分钟后间隔1分钟,大于5分钟后间隔5分钟,总共只查询30分钟,后续不在查询
func Duration(t *time.Time) (int, error) {
	if t == nil {
		return 5, nil
	}
	rt := *t
	if rt.IsZero() {
		return 5, nil
	}
	duration := time.Since(rt).Abs().Minutes()
	seconds := time.Since(rt).Abs().Seconds()
	switch {
	case duration > 30:
		return 0, fmt.Errorf("已超过30分钟")
	case duration > 5:
		return 5 * 60, nil
	case duration > 2:
		return 2 * 60, nil
	case seconds > 5 && seconds <= 10:
		return 5, nil
	default:
		return 10, nil
	}
}