package main

import (
	"cicv-data-closedloop/pjisuv_msgs"
	"fmt"
	"math"
	"sync"
)

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

// 禁止存在下划线_
func Label() string {
	return "CloseTargetDisappears"
}
func IsDisappears(PreCloseTargetSlice []uint32, perceptionslice []uint32) bool {
	flag := false
	if len(PreCloseTargetSlice) > 0 {
	lable1:
		for i := 0; i <= len(PreCloseTargetSlice)-1; i++ {
			PreID := PreCloseTargetSlice[i]
			for _, perceptionID := range perceptionslice {
				if PreID == perceptionID {
					continue lable1
				}
			}
			//fmt.Println("CloseTargetDisappears")
			return true
		}
	}
	return flag
}
func Rule(shareVars *sync.Map, data *pjisuv_msgs.PerceptionObjects) string {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("Recovered from panic:", r)
		}
	}()
	PreCloseTargetSlice, ok := shareVars.Load("PreCloseTargetSlice")
	OutsideWorkshopFlag, ok3 := shareVars.Load("OutsideWorkshopFlag")
	if ok && ok3 && OutsideWorkshopFlag.(bool) {
		NowCloseTargetSlice := []uint32{}
		perceptionslice := []uint32{}
		for _, obj := range data.Objs {
			perceptionslice = append(perceptionslice, obj.Id)
			if math.Abs(float64(obj.X)) <= 20 && math.Abs(float64(obj.Y)) <= 10 {
				NowCloseTargetSlice = append(NowCloseTargetSlice, obj.Id)
			}
		}
		if IsDisappears(PreCloseTargetSlice.([]uint32), perceptionslice) {
			eventLabel := "CloseTargetDisappears"
			fmt.Println(eventLabel)
			PreCloseTargetSlice = NowCloseTargetSlice
			shareVars.Store("PreCloseTargetSlice", PreCloseTargetSlice)
			return Label()
		}
		PreCloseTargetSlice = NowCloseTargetSlice
		shareVars.Store("PreCloseTargetSlice", PreCloseTargetSlice)
	}

	return ""
}