package main

import (
	"fmt"
)

type Rule struct {
	Name      string
	DataType  string
	TopicName string
}

func generateRuleCode1(rules []Rule) string {
	code := ""
	for i, rule := range rules {
		ifPart := "if"
		if i > 0 {
			ifPart = "} else if"
		}
		code += fmt.Sprintf(`
		%s %s == topic2 { // %d
			if f, ok1 := rule.(func(data *%s) string); ok1 {
				%s = append(%s, f)
				goto JudgeDone
			}
			log(triggerLocalPath)
			continue
		`, ifPart, rule.TopicName, i+1, rule.DataType, rule.Name, rule.Name)
	}
	code += "}"
	return code
}
func generateRuleCode2(rules []Rule) string {
	code := ""
	for _, rule := range rules {
		code += fmt.Sprintf(`
		if topic == masterConfig.%s && len(masterConfig.%s) > 0 {
			subscribers[i], err = goroslib.NewSubscriber(goroslib.SubscriberConf{
				Node:  commonConfig.RosNode,
				Topic: topic,
				Callback: func(data *%s) {
					subscribersTimeMutexes[i].Lock()
					if time.Since(subscribersTimes[i]).Seconds() > triggerInterval {
						subscribersMutexes[i].Lock()
						faultHappenTime := commonUtil.GetNowTimeCustom() // 获取当前故障发生时间
						lastTimeWindow := entity.GetLastTimeWindow()     // 获取最后一个时间窗口
						var faultLabel string
						for _, f := range masterConfig.%s {
							faultLabel = f(data)
							if faultLabel != "" {
								if !canCollect() {
									break
								}
								subscribersTimes[i] = time.Now()
								c_log.GlobalLogger.Errorf("触发事件【xxx】,开始采集。", faultLabel)
								saveTimeWindow(faultLabel, faultHappenTime, lastTimeWindow)
								break
							}
						}
						subscribersMutexes[i].Unlock()
					}
					subscribersTimeMutexes[i].Unlock()
				},
			})
			if err == nil {
				create = true
			}
		}`, rule.TopicName, rule.Name, rule.DataType, rule.Name)
	}
	code += "}"
	return code
}

func main() {
	rules := []Rule{
		{"Rule1", "std_msgs.Int16MultiArray", "Topic1"},
		{"Rule2", "geometry_msgs.PoseStamped", "Topic2"},
		{"Rule3", "dynamic_reconfigure.ConfigDescription", "Topic3"},
		{"Rule4", "dynamic_reconfigure.Config", "Topic4"},
		{"Rule5", "std_msgs.String", "Topic5"},
		{"Rule6", "geometry_msgs.PoseWithCovarianceStamped", "Topic6"},
		{"Rule7", "std_msgs.String", "Topic7"},
		{"Rule8", "std_msgs.String", "Topic8"},
		{"Rule9", "std_msgs.Bool", "Topic9"},
		{"Rule10", "std_msgs.Int8", "Topic10"},
		{"Rule11", "std_msgs.Int8", "Topic11"},
		{"Rule12", "sensor_msgs.PointCloud2", "Topic12"},
		{"Rule13", "sensor_msgs.BatteryState", "Topic13"},
		{"Rule14", "std_msgs.Int16", "Topic14"},
		{"Rule15", "visualization_msgs.Marker", "Topic15"},
		{"Rule16", "std_msgs.String", "Topic16"},
		{"Rule17", "sensor_msgs.CameraInfo", "Topic17"},
		{"Rule18", "sensor_msgs.Image", "Topic18"},
		{"Rule19", "sensor_msgs.CompressedImage", "Topic19"},
		{"Rule20", "dynamic_reconfigure.ConfigDescription", "Topic20"},
		{"Rule21", "dynamic_reconfigure.Config", "Topic21"},
		{"Rule22", "sensor_msgs.CompressedImage", "Topic22"},
		{"Rule23", "dynamic_reconfigure.ConfigDescription", "Topic23"},
		{"Rule24", "dynamic_reconfigure.Config", "Topic24"},
		{"Rule25", "theora_image_transport.Packet", "Topic25"},
		{"Rule26", "dynamic_reconfigure.ConfigDescription", "Topic26"},
		{"Rule27", "dynamic_reconfigure.Config", "Topic27"},
		{"Rule28", "sensor_msgs.PointCloud2", "Topic28"},
		{"Rule29", "sensor_msgs.CameraInfo", "Topic29"},
		{"Rule30", "sensor_msgs.Image", "Topic30"},
		{"Rule31", "sensor_msgs.CompressedImage", "Topic31"},
		{"Rule32", "dynamic_reconfigure.ConfigDescription", "Topic32"},
		{"Rule33", "dynamic_reconfigure.Config", "Topic33"},
		{"Rule34", "sensor_msgs.CompressedImage", "Topic34"},
		{"Rule35", "dynamic_reconfigure.ConfigDescription", "Topic35"},
		{"Rule36", "dynamic_reconfigure.Config", "Topic36"},
		{"Rule37", "theora_image_transport.Packet", "Topic37"},
		{"Rule38", "dynamic_reconfigure.ConfigDescription", "Topic38"},
		{"Rule39", "dynamic_reconfigure.Config", "Topic39"},
		{"Rule40", "geometry_msgs.PoseStamped", "Topic40"},
		{"Rule41", "geometry_msgs.PoseStamped", "Topic41"},
		{"Rule42", "nav_msgs.Path", "Topic42"},
		{"Rule43", "std_msgs.Int8", "Topic43"},
		{"Rule44", "std_msgs.Bool", "Topic44"},
		{"Rule45", "nav_msgs.Path", "Topic45"},
		{"Rule46", "geometry_msgs.PoseStamped", "Topic46"},
		{"Rule47", "geometry_msgs.PoseStamped", "Topic47"},
		{"Rule48", "geometry_msgs.PoseStamped", "Topic48"},
		{"Rule49", "std_msgs.String", "Topic49"},
		{"Rule50", "visualization_msgs.MarkerArray", "Topic50"},
		{"Rule51", "geometry_msgs.PolygonStamped", "Topic51"},
		{"Rule52", "nav_msgs.OccupancyGrid", "Topic52"},
		{"Rule53", "nav_msgs.OccupancyGrid", "Topic53"},
		{"Rule54", "nav_msgs.OccupancyGrid", "Topic54"},
		{"Rule55", "std_msgs.Float32", "Topic55"},
		{"Rule56", "std_msgs.Int32", "Topic56"},
		{"Rule57", "nav_msgs.Path", "Topic57"},
		{"Rule58", "clean_msg.ErrorInfo", "Topic58"},
		{"Rule59", "nav_msgs.OccupancyGrid", "Topic59"},
		{"Rule60", "nav_msgs.OccupancyGrid", "Topic60"},
		{"Rule61", "nav_msgs.OccupancyGrid", "Topic61"},
		{"Rule62", "nav_msgs.OccupancyGrid", "Topic62"},
		{"Rule63", "nav_msgs.OccupancyGrid", "Topic63"},
		{"Rule64", "nav_msgs.OccupancyGrid", "Topic64"},
		{"Rule65", "std_msgs.String", "Topic65"},
		{"Rule66", "std_msgs.Bool", "Topic66"},
		{"Rule67", "std_msgs.Bool", "Topic67"},
		{"Rule68", "geometry_msgs.PolygonStamped", "Topic68"},
		{"Rule69", "geometry_msgs.PointStamped", "Topic69"},
		{"Rule70", "std_msgs.String", "Topic70"},
		{"Rule71", "geometry_msgs.Twist", "Topic71"},
		{"Rule72", "geometry_msgs.Twist", "Topic72"},
		{"Rule73", "nav_msgs.Path", "Topic73"},
		{"Rule74", "common_msgs.CreateMapInfo", "Topic74"},
		{"Rule75", "geometry_msgs.Twist", "Topic75"},
		{"Rule76", "common_msgs.SensorStatus", "Topic76"},
		{"Rule77", "geometry_msgs.PoseArray", "Topic77"},
		{"Rule78", "nav_msgs.Path", "Topic78"},
		{"Rule79", "common_msgs.IdentifierObjsInfo", "Topic79"},
		{"Rule80", "common_msgs.McuDiagnostic", "Topic80"},
		{"Rule81", "diagnostic_msgs.DiagnosticArray", "Topic81"},
		{"Rule82", "std_msgs.Int8", "Topic82"},
		{"Rule83", "std_msgs.Int16", "Topic83"},
		{"Rule84", "geometry_msgs.Vector3Stamped", "Topic84"},
		{"Rule85", "sensor_msgs.LaserScan", "Topic85"},
		{"Rule86", "sensor_msgs.PointCloud2", "Topic86"},
		{"Rule87", "std_msgs.String", "Topic87"},
		{"Rule88", "std_msgs.String", "Topic88"},
		{"Rule89", "std_msgs.String", "Topic89"},
		{"Rule90", "std_msgs.Int32", "Topic90"},
		{"Rule91", "common_msgs.TaskInfo", "Topic91"},
		{"Rule92", "common_msgs.MapInfo", "Topic92"},
		{"Rule93", "nav_msgs.Path", "Topic93"},
		{"Rule94", "common_msgs.VideoStream", "Topic94"},
		{"Rule95", "sensor_msgs.PointCloud2", "Topic95"},
		{"Rule96", "nav_msgs.Path", "Topic96"},
		{"Rule97", "sensor_msgs.PointCloud2", "Topic97"},
		{"Rule98", "sensor_msgs.PointCloud2", "Topic98"},
		{"Rule99", "sensor_msgs.PointCloud2", "Topic99"},
		{"Rule100", "geometry_msgs.PointStamped", "Topic100"},
		{"Rule101", "nav_msgs.Path", "Topic101"},
		{"Rule102", "geometry_msgs.PoseStamped", "Topic102"},
		{"Rule103", "geometry_msgs.PoseWithCovarianceStamped", "Topic103"},
		{"Rule104", "geometry_msgs.Pose", "Topic104"},
		{"Rule105", "std_msgs.String", "Topic105"},
		{"Rule106", "std_msgs.String", "Topic106"},
		{"Rule107", "std_msgs.String", "Topic107"},
		{"Rule108", "std_msgs.String", "Topic108"},
		{"Rule109", "std_msgs.Float64", "Topic109"},
		{"Rule110", "std_msgs.String", "Topic110"},
		{"Rule111", "std_msgs.String", "Topic111"},
		{"Rule112", "sensor_msgs.Imu", "Topic112"},
		{"Rule113", "std_msgs.String", "Topic113"},
		{"Rule114", "std_msgs.Int8", "Topic114"},
		{"Rule115", "std_msgs.Int16", "Topic115"},
		{"Rule116", "std_msgs.String", "Topic116"},
		{"Rule117", "std_msgs.String", "Topic117"},
		{"Rule118", "geometry_msgs.PoseWithCovarianceStamped", "Topic118"},
		{"Rule119", "sensor_msgs.JointState", "Topic119"},
		{"Rule120", "std_msgs.String", "Topic120"},
		{"Rule121", "cartographer_ros_msgs.LandmarkList", "Topic121"},
		{"Rule122", "nav_msgs.Odometry", "Topic122"},
		{"Rule123", "sensor_msgs.LaserScan", "Topic123"},
		{"Rule124", "std_msgs.String", "Topic124"},
		{"Rule125", "nav_msgs.Path", "Topic125"},
		{"Rule126", "std_msgs.String", "Topic126"},
		{"Rule127", "std_msgs.String", "Topic127"},
		{"Rule128", "std_msgs.String", "Topic128"},
		{"Rule129", "std_msgs.String", "Topic129"},
		{"Rule130", "geometry_msgs.PoseWithCovarianceStamped", "Topic130"},
		{"Rule131", "std_msgs.String", "Topic131"},
		{"Rule132", "std_msgs.String", "Topic132"},
		{"Rule133", "common_msgs.LocateInfo", "Topic133"},
		{"Rule134", "std_msgs.Bool", "Topic134"},
		{"Rule135", "std_msgs.Float64MultiArray", "Topic135"},
		{"Rule136", "std_msgs.String", "Topic136"},
		{"Rule137", "std_msgs.String", "Topic137"},
		{"Rule138", "nav_msgs.OccupancyGrid", "Topic138"},
		{"Rule139", "std_msgs.String", "Topic139"},
		{"Rule140", "nav_msgs.Path", "Topic140"},
		{"Rule141", "std_msgs.String", "Topic141"},
		{"Rule142", "std_msgs.String", "Topic142"},
		{"Rule143", "nav_msgs.MapMetaData", "Topic143"},
		{"Rule144", "nav_msgs.Path", "Topic144"},
		{"Rule145", "geometry_msgs.PoseStamped", "Topic145"},
		{"Rule146", "nav_msgs.OccupancyGrid", "Topic146"},
		{"Rule147", "nav_msgs.OccupancyGrid", "Topic147"},
		{"Rule148", "std_msgs.String", "Topic148"},
		{"Rule149", "std_msgs.String", "Topic149"},
		{"Rule150", "std_msgs.String", "Topic150"},
		{"Rule151", "std_msgs.String", "Topic151"},
		{"Rule152", "std_msgs.Bool", "Topic152"},
		{"Rule153", "sensor_msgs.CameraInfo", "Topic153"},
		{"Rule154", "sensor_msgs.Image", "Topic154"},
		{"Rule155", "sensor_msgs.CompressedImage", "Topic155"},
		{"Rule156", "dynamic_reconfigure.ConfigDescription", "Topic156"},
		{"Rule157", "dynamic_reconfigure.Config", "Topic157"},
		{"Rule158", "sensor_msgs.CompressedImage", "Topic158"},
		{"Rule159", "dynamic_reconfigure.ConfigDescription", "Topic159"},
		{"Rule160", "dynamic_reconfigure.Config", "Topic160"},
		{"Rule161", "theora_image_transport.Packet", "Topic161"},
		{"Rule162", "dynamic_reconfigure.ConfigDescription", "Topic162"},
		{"Rule163", "dynamic_reconfigure.Config", "Topic163"},
		{"Rule164", "sensor_msgs.CameraInfo", "Topic164"},
		{"Rule165", "sensor_msgs.Image", "Topic165"},
		{"Rule166", "sensor_msgs.CompressedImage", "Topic166"},
		{"Rule167", "dynamic_reconfigure.ConfigDescription", "Topic167"},
		{"Rule168", "dynamic_reconfigure.Config", "Topic168"},
		{"Rule169", "sensor_msgs.CompressedImage", "Topic169"},
		{"Rule170", "dynamic_reconfigure.ConfigDescription", "Topic170"},
		{"Rule171", "dynamic_reconfigure.Config", "Topic171"},
		{"Rule172", "theora_image_transport.Packet", "Topic172"},
		{"Rule173", "dynamic_reconfigure.ConfigDescription", "Topic173"},
		{"Rule174", "dynamic_reconfigure.Config", "Topic174"},
		{"Rule175", "sensor_msgs.PointCloud2", "Topic175"},
		{"Rule176", "sensor_msgs.CameraInfo", "Topic176"},
		{"Rule177", "sensor_msgs.Image", "Topic177"},
		{"Rule178", "sensor_msgs.CompressedImage", "Topic178"},
		{"Rule179", "dynamic_reconfigure.ConfigDescription", "Topic179"},
		{"Rule180", "dynamic_reconfigure.Config", "Topic180"},
		{"Rule181", "sensor_msgs.CompressedImage", "Topic181"},
		{"Rule182", "dynamic_reconfigure.ConfigDescription", "Topic182"},
		{"Rule183", "dynamic_reconfigure.Config", "Topic183"},
		{"Rule184", "theora_image_transport.Packet", "Topic184"},
		{"Rule185", "dynamic_reconfigure.ConfigDescription", "Topic185"},
		{"Rule186", "dynamic_reconfigure.Config", "Topic186"},
		{"Rule187", "sensor_msgs.CameraInfo", "Topic187"},
		{"Rule188", "sensor_msgs.Image", "Topic188"},
		{"Rule189", "sensor_msgs.CompressedImage", "Topic189"},
		{"Rule190", "dynamic_reconfigure.ConfigDescription", "Topic190"},
		{"Rule191", "dynamic_reconfigure.Config", "Topic191"},
		{"Rule192", "sensor_msgs.CompressedImage", "Topic192"},
		{"Rule193", "dynamic_reconfigure.ConfigDescription", "Topic193"},
		{"Rule194", "dynamic_reconfigure.Config", "Topic194"},
		{"Rule195", "theora_image_transport.Packet", "Topic195"},
		{"Rule196", "dynamic_reconfigure.ConfigDescription", "Topic196"},
		{"Rule197", "dynamic_reconfigure.Config", "Topic197"},
		{"Rule198", "sensor_msgs.PointCloud2", "Topic198"},
		{"Rule199", "geometry_msgs.PoseStamped", "Topic199"},
		{"Rule200", "geometry_msgs.PoseStamped", "Topic200"},
		{"Rule201", "std_msgs.UInt8", "Topic201"},
		{"Rule202", "nav_msgs.Odometry", "Topic202"},
		{"Rule203", "std_msgs.String", "Topic203"},
		{"Rule204", "std_msgs.String", "Topic204"},
		{"Rule205", "nav_msgs.Odometry", "Topic205"},
		{"Rule206", "sensor_msgs.Imu", "Topic206"},
		{"Rule207", "sensor_msgs.PointCloud2", "Topic207"},
		{"Rule208", "geometry_msgs.PoseArray", "Topic208"},
		{"Rule209", "sensor_msgs.PointCloud2", "Topic209"},
		{"Rule210", "sensor_msgs.LaserScan", "Topic210"},
		{"Rule211", "geometry_msgs.PoseWithCovarianceStamped", "Topic211"},
		{"Rule212", "geometry_msgs.Vector3Stamped", "Topic212"},
		{"Rule213", "std_msgs.String", "Topic213"},
		{"Rule214", "common_msgs.FunctionAreas", "Topic214"},
		{"Rule215", "std_msgs.Bool", "Topic215"},
		{"Rule216", "nav_msgs.Path", "Topic216"},
		{"Rule217", "std_msgs.Float64MultiArray", "Topic217"},
		{"Rule218", "std_msgs.String", "Topic218"},
		{"Rule219", "std_msgs.String", "Topic219"},
		{"Rule220", "std_msgs.String", "Topic220"},
		{"Rule221", "geometry_msgs.PoseStamped", "Topic221"},
		{"Rule222", "geometry_msgs.PoseWithCovarianceStamped", "Topic222"},
		{"Rule223", "std_msgs.String", "Topic223"},
		{"Rule224", "std_msgs.String", "Topic224"},
		{"Rule225", "localization_monitor.RobotStatus", "Topic225"},
		{"Rule226", "std_msgs.Float64MultiArray", "Topic226"},
		{"Rule227", "std_msgs.String", "Topic227"},
		{"Rule228", "actionlib_msgs.GoalID", "Topic228"},
		{"Rule229", "ipa_building_msgs.MapSegmentationActionFeedback", "Topic229"},
		{"Rule230", "ipa_building_msgs.MapSegmentationActionGoal", "Topic230"},
		{"Rule231", "dynamic_reconfigure.ConfigDescription", "Topic231"},
		{"Rule232", "dynamic_reconfigure.Config", "Topic232"},
		{"Rule233", "ipa_building_msgs.MapSegmentationActionResult", "Topic233"},
		{"Rule234", "nav_msgs.OccupancyGrid", "Topic234"},
		{"Rule235", "actionlib_msgs.GoalStatusArray", "Topic235"},
		{"Rule236", "rosgraph_msgs.Log", "Topic236"},
		{"Rule237", "rosgraph_msgs.Log", "Topic237"},
		{"Rule238", "nav_msgs.Path", "Topic238"},
		{"Rule239", "geometry_msgs.Vector3Stamped", "Topic239"},
		{"Rule240", "sensor_msgs.LaserScan", "Topic240"},
		{"Rule241", "sensor_msgs.LaserScan", "Topic241"},
		{"Rule242", "sensor_msgs.LaserScan", "Topic242"},
		{"Rule243", "sensor_msgs.LaserScan", "Topic243"},
		{"Rule244", "sensor_msgs.LaserScan", "Topic244"},
		{"Rule245", "sensor_msgs.PointCloud2", "Topic245"},
		{"Rule246", "sensor_msgs.PointCloud2", "Topic246"},
		{"Rule247", "visualization_msgs.MarkerArray", "Topic247"},
		{"Rule248", "common_msgs.SensorTask", "Topic248"},
		{"Rule249", "std_msgs.String", "Topic249"},
		{"Rule250", "geometry_msgs.Vector3Stamped", "Topic250"},
		{"Rule251", "common_msgs.SonarList", "Topic251"},
		{"Rule252", "nav_msgs.Odometry", "Topic252"},
		{"Rule253", "sensor_msgs.LaserScan", "Topic253"},
		{"Rule254", "std_msgs.Bool", "Topic254"},
		{"Rule255", "sensor_msgs.LaserScan", "Topic255"},
		{"Rule256", "std_msgs.String", "Topic256"},
		{"Rule257", "std_msgs.Bool", "Topic257"},
		{"Rule258", "sensor_msgs.CameraInfo", "Topic258"},
		{"Rule259", "common_msgs.SysInfo", "Topic259"},
		{"Rule260", "sensor_msgs.Image", "Topic260"},
		{"Rule261", "sensor_msgs.CompressedImage", "Topic261"},
		{"Rule262", "dynamic_reconfigure.ConfigDescription", "Topic262"},
		{"Rule263", "dynamic_reconfigure.Config", "Topic263"},
		{"Rule264", "sensor_msgs.CompressedImage", "Topic264"},
		{"Rule265", "dynamic_reconfigure.ConfigDescription", "Topic265"},
		{"Rule266", "dynamic_reconfigure.Config", "Topic266"},
		{"Rule267", "theora_image_transport.Packet", "Topic267"},
		{"Rule268", "dynamic_reconfigure.ConfigDescription", "Topic268"},
		{"Rule269", "dynamic_reconfigure.Config", "Topic269"},
		{"Rule270", "std_msgs.Bool", "Topic270"},
		{"Rule271", "geometry_msgs.PoseStamped", "Topic271"},
		{"Rule272", "geometry_msgs.Vector3Stamped", "Topic272"},
		{"Rule273", "common_msgs.TaskFeedbackInfo", "Topic273"},
		{"Rule274", "common_msgs.Points", "Topic274"},
		{"Rule275", "tf2_msgs.TFMessage", "Topic275"},
		{"Rule276", "std_msgs.String", "Topic276"},
		{"Rule277", "tf2_msgs.TFMessage", "Topic277"},
		{"Rule278", "nav_msgs.Path", "Topic278"},
		{"Rule279", "common_msgs.UpLoadFileList", "Topic279"},
		{"Rule280", "sensor_msgs.Range", "Topic280"},
		{"Rule281", "sensor_msgs.LaserScan", "Topic281"},
		{"Rule282", "sensor_msgs.LaserScan", "Topic282"},
		{"Rule283", "sensor_msgs.LaserScan", "Topic283"},
		{"Rule284", "sensor_msgs.LaserScan", "Topic284"},
	}

	code := generateRuleCode2(rules)
	fmt.Println(code)
}