package main

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

// 该程序存在的意义是为cicv_ticker中的FrontCarSideBySide触发器提供countSideBySide的全局变量
func Topic() string {
	return "/tpperception"
}

func Rule(shareVars *sync.Map, data *pjisuv_msgs.PerceptionObjects) string {
	defer func() {
		if r := recover(); r != nil {
			fmt.Println("Recovered from panic:", r)
		}
	}()
	count1 := 0
	AbsSpeed, ok := shareVars.Load("AbsSpeed")
	OutsideWorkshopFlag, ok1 := shareVars.Load("OutsideWorkshopFlag")
	OutsideWorkshopFlag = OutsideWorkshopFlag.(bool)
	countSideBySide, ok2 := shareVars.Load("CountSideBySide")
	if ok && ok1 && ok2 {
	lable1:
		for _, obj := range data.Objs {
			if !(obj.Type != 2 || obj.Type != 3 || obj.Type != 4 || !(obj.X >= 3 && obj.X <= 17) || math.Abs(float64(obj.Y)) > 10) {
				//fmt.Println("here")
				obj1ID := obj.Id
				obj1x := obj.X
				obj1y := obj.Y
				//fmt.Println(obj1ID, obj1x, obj1y)
				for _, obj1 := range data.Objs {
					if !(obj1.Type != 2 || obj1.Type != 3 || obj1.Type != 4 || !(obj1.X >= 3 && obj1.X <= 17) || math.Abs(float64(obj1.Y)) > 10) {
						obj2ID := obj1.Id
						obj2x := obj1.X
						obj2y := obj1.Y
						if obj2ID != obj1ID && math.Abs(float64(obj2x-obj1x)) <= 2.2 && math.Abs(float64(obj2y-obj1y)) >= 2 && math.Abs(float64(obj2y-obj1y)) <= 4.0 && AbsSpeed.(float64) > 2 {
							count1 = countSideBySide.(int) + 1
							shareVars.Store("countSideBySide", count1)
							break lable1
						}
					}

				}

			}

		}
	}

	return ""
}