package main

import (
	"cicv-data-closedloop/pjisuv_msgs"
	"cicv-data-closedloop/pjisuv_param"
	"math"
)

func Topic() string {
	return "/cicv_amr_trajectory"
}

// Label todo 禁止存在下划线_
func Label() string {
	return "controljump"
}

func Rule(data *pjisuv_msgs.Trajectory, param pjisuv_param.PjisuvParam) string {
	var currentCurvateres []float64
	for _, point := range data.Trajectoryinfo.Trajectorypoints {
		currentCurvateres = append(currentCurvateres, math.Abs(float64(point.Curvature)))
	}
	if len(currentCurvateres) != 0 {
		maxCurrent := findMax(currentCurvateres)
		maxLast := findMax(param.LastCurvaturesOfCicvAmrTrajectory)
		a := math.Abs(maxCurrent - maxLast)
		if a >= 0.099 {
			return "controljump"
		}
	}
	return ""
}

// findMax 函数接收一个float64类型的切片，并返回其中的最大值
func findMax(numbers []float64) float64 {
	if len(numbers) == 0 {
		// 如果没有元素，可以根据需要处理，这里直接返回0作为示例
		return 0
	}
	maxTemp := numbers[0] // 假设第一个元素就是最大的
	for _, number := range numbers {
		if number > maxTemp {
			maxTemp = number
		}
	}
	return maxTemp
}
