package kinglong_msgs

import (
	"github.com/bluenviron/goroslib/v2/pkg/msg"
	"github.com/bluenviron/goroslib/v2/pkg/msgs/std_msgs"
)

type FaultInfo struct {
	msg.Package  `ros:"common_msgs"`
	TimestampSec float64
	ModuleName   string
	Version      string
	ErrorCode    int32
	Msg          string
	FaultLevel   int8
	FaultType    int8
}

type Header struct {
	msg.Package    `ros:"common_msgs"`
	SequenceNum    int32
	TimeStamp      float64
	ModuleName     string
	Version        string
	FaultVec       FaultVec
	TimeStatistics TimeStatistics
}

type FaultVec struct {
	msg.Package      `ros:"common_msgs"`
	InfoVec          []FaultInfo
	ModuleFaultLevel int32
}

type TimeStatistics struct {
	msg.Package      `ros:"common_msgs"`
	DevTimeStatusMsg []TimeStatus
	SendingTimestamp float64
}

type TimeStatus struct {
	msg.Package         `ros:"common_msgs"`
	Dtime               float64
	SourceNodeName      string
	DestinationNodeName string
}

type Retrieval struct {
	msg.Package            `ros:"common_msgs"`
	Header                 std_msgs.Header `rosname:"header"`
	AsVehAccelerationValue float64         `rosname:"AS_Veh_Acceleration_Value"`
	AsDriverTakeoverReq    int16           `rosname:"AS_Driver_TakeOver_Req"`
	VcuAccelPosValue       float64         `rosname:"VCU_Accel_Pos_Value"`
	VcuBrkPelPosValue      float64         `rosname:"VCU_BrkPel_Pos_Value"`
	VcuRealSpeed           float64         `rosname:"VCU_Real_Speed"`
	VcuCurrentGear         int16           `rosname:"VCU_Current_Gear"`
	VcuParkingSt           int16           `rosname:"VCU_Parking_St"`
	AutoDLimitInReason     int16           `rosname:"AutoD_Limitin_Reason"`
	EmergencyStopReason    int16           `rosname:"Emergency_Stop_Reason"`
	VcuDriverTakeoverReq   int16           `rosname:"VCU_Driver_TakeOver_Req"`
	VcuVehicleDriveModeSt  int16           `rosname:"VCU_Vehicle_Drive_Mode_St"`
	AutoDOutReason         int16           `rosname:"AutoD_Out_Reason"`
	BrakeSysFaultSt        int16           `rosname:"Brak_Sys_Fault_St"`
	StrgAngleRealValue     float64         `rosname:"Strg_Angle_Real_Value"`
	StrgAngleSpdValue      float64         `rosname:"Strg_Angle_Spd_Value"`
	StrgWorkmodeSt         int16           `rosname:"Strg_WorkMode_St"`
}