package util

import (
	"ZhenTuLocalPassiveAdapter/dto"
	"context"
	"go.opentelemetry.io/otel/attribute"
	"sort"
	"time"
)

func FilterAndSortFiles(ctx context.Context, fileList []dto.File, beginDt, endDt time.Time) []dto.File {
	_, span := tracer.Start(ctx, "FilterAndSortFiles")
	defer span.End()
	span.SetAttributes(attribute.Int("files.count", len(fileList)))
	var filteredFiles []dto.File

	for _, file := range fileList {
		fileStartTime := file.StartTime
		nextFileStartTime := file.EndTime

		file.DiffMs = beginDt.Sub(fileStartTime).Milliseconds()
		// 如果当前文件还没有开始
		if beginDt.After(fileStartTime) {
			// 没有下一个文件的情况下,就是最后一个文件
			if nextFileStartTime.IsZero() {
				continue
			}
			// 但是下一个文件已经开始
			if beginDt.Before(nextFileStartTime) {
				filteredFiles = append(filteredFiles, file)
			}
			// 已经开始,但是也已经结束了
		} else if fileStartTime.After(endDt) {
			continue
			// 已经开始,但未结束
		} else {
			filteredFiles = append(filteredFiles, file)
		}
	}

	// 按照 Create 的值升序排序
	sort.Slice(filteredFiles, func(i, j int) bool {
		return filteredFiles[i].StartTime.Unix() <= filteredFiles[j].StartTime.Unix()
	})
	span.SetAttributes(attribute.String("files.filtered", ToJson(filteredFiles)))
	return filteredFiles
}