package domain

import (
	"cicv-data-closedloop/common/config/c_log"
	"cicv-data-closedloop/common/entity"
	"cicv-data-closedloop/common/util"
	"strings"
	"time"
)

func MoveFromDataToCopy(faultTime string, bagDataDir string, sourceBag string, bagCopyDir string) {
	dir := GetCopyDir(bagCopyDir, faultTime)
	_ = util.CreateDir(dir)
	targetBag := strings.Replace(sourceBag, bagDataDir, dir, 1)
	var copyCommand []string
	copyCommand = append(copyCommand, sourceBag)
	copyCommand = append(copyCommand, targetBag)
	_, _, _ = util.Execute("mv", copyCommand...)
}

func GetCopyDir(bagDataDir string, faultTime string) string {
	return bagDataDir + faultTime + "/"
}

// SupplyCopyBags 如果 Copy目录下的包不够,则补充一些
func SupplyCopyBags(bagDataDir string, bagCopyDir string, currentTimeWindow entity.TimeWindow) {
	// 如果bag包没有达到length,补充几个
	copyBags, _ := util.ListAbsolutePathWithSuffixAndSort(GetCopyDir(bagCopyDir, currentTimeWindow.FaultTime), ".bag")
	copyBagsLength := len(copyBags)
	if copyBagsLength < currentTimeWindow.Length {
		time.Sleep(time.Duration(copyBagsLength) * time.Second)
		dataBags, _ := util.ListAbsolutePathWithSuffixAndSort(bagDataDir, ".bag")
		gap := currentTimeWindow.Length - copyBagsLength
		c_log.GlobalLogger.Info("故障 ", currentTimeWindow.FaultTime, "需要补充 ", gap, " 个 bag 包")
		for _, bag := range dataBags {
			bagTime := util.GetBagTime(bag)
			if util.TimeCustom1GreaterEqualThanTimeCustom2(bagTime, currentTimeWindow.FaultTime) {
				MoveFromDataToCopy(currentTimeWindow.FaultTime, bagDataDir, bag, bagCopyDir)
				gap = gap - 1
				if gap == 0 {
					break
				}
			}
		}
	}
}