package stime

import (
	"fmt"
	"strconv"
	"time"
)

// 根据指定时间获取后面的若干天工作日列表
// param baseOn 指定基准时间
// param daysNum 获取工作日的数量
func GetWorkDayList(baseOn *time.Time, daysNum int) []time.Time {
	var timeList []time.Time
	var basCount = 1
	var workDay time.Time
	for {
		if len(timeList) == daysNum {
			break
		}
		workDay = baseOn.AddDate(0, 0, basCount)
		switch workDay.Weekday() {
		case time.Saturday:
			basCount += 2
			continue
		case time.Sunday:
			basCount++
			continue
		default:
			timeList = append(timeList, workDay)
			basCount++
		}
	}
	return timeList
}

// 根据指定时间获取后面的若干天工作日列表
// param baseOn 指定基准时间
// param daysNum 获取工作日的数量
func GetWorkDayStrList(baseOn *time.Time, daysNum int) []string {
	var timeList []string
	var basCount = 1
	var workDay time.Time
	for {
		if len(timeList) == daysNum {
			break
		}
		workDay = baseOn.AddDate(0, 0, basCount)
		switch workDay.Weekday() {
		case time.Saturday:
			basCount += 2
			continue
		case time.Sunday:
			basCount++
			continue
		default:
			timeList = append(timeList, TimeToString(workDay, Format_Normal_YMD))
			basCount++
		}
	}
	return timeList
}

// 获取时间差文字描述
func GetTimeDifferenceDesc(now *time.Time, before *time.Time) string {
	if before == nil {
		return ""
	}
	if now.After(*before) {
		subTimestamp := now.Unix() - before.Unix()
		day := subTimestamp / (3600 * 24)
		hour := (subTimestamp - day*3600*24) / 3600
		minute := (subTimestamp - day*3600*24 - hour*3600) / 60
		second := subTimestamp - day*3600*24 - hour*3600 - minute*60

		switch {
		case day > 0:
			if hour > 0 {
				return fmt.Sprintf("%d天%d小时", day, hour)
			} else {
				return fmt.Sprintf("%d天", day)
			}
		case hour > 0:
			if minute < 10 {
				return fmt.Sprintf("%d小时", hour)
			} else {
				return fmt.Sprintf("%d小时%d", hour, minute)
			}
		case hour == 0 && minute > 0:
			return fmt.Sprintf("%d分钟", minute)
		case hour == 0 && minute == 0:
			return fmt.Sprintf("%d秒", second)
		}
	}
	return ""
}

// TimeStampToBytes 时间戳转字节
func TimeStampToBytes(stamp int64) []byte {
	timeStr := strconv.FormatInt(stamp, 2)
	return []byte(timeStr)
}