package pjisuv_msgs

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

type PerceptionObjects struct {
	msg.Package `ros:"perception_msgs"`
	Header      Header         `rosname:"header"`
	Objs        []Object       `rosname:"objs"`
	Cells       []ObstacleCell `rosname:"cells"`
}

type Object struct {
	msg.Package    `ros:"perception_msgs"`
	Id             uint32         `rosname:"id"`
	X              float32        `rosname:"x"`
	Y              float32        `rosname:"y"`
	Z              float32        `rosname:"z"`
	Vxrel          float32        `rosname:"vxrel"`
	Vyrel          float32        `rosname:"vyrel"`
	Xabs           float64        `rosname:"xabs"`
	Yabs           float64        `rosname:"yabs"`
	Vxabs          float32        `rosname:"vxabs"`
	Vyabs          float32        `rosname:"vyabs"`
	Width          float32        `rosname:"width"`
	Length         float32        `rosname:"length"`
	Height         float32        `rosname:"height"`
	Speed          float32        `rosname:"speed"`
	Heading        float32        `rosname:"heading"`
	Type           uint8          `rosname:"type"`
	Source         uint8          `rosname:"source"`
	Confidence     float32        `rosname:"confidence"`
	Age            uint32         `rosname:"age"`
	Velocitystatus uint8          `rosname:"velocitystatus"`
	Cells          []ObstacleCell `rosname:"cells"`
}

type ObstacleCell struct {
	msg.Package `ros:"perception_msgs"`
	Idc         int32   `rosname:"idc"`
	X           float64 `rosname:"x"`
	Y           float64 `rosname:"y"`
	Xg          float64 `rosname:"xg"`
	Yg          float64 `rosname:"yg"`
}

type PerceptionLocalization struct {
	msg.Package `ros:"perception_msgs"`

	Header           std_msgs.Header `rosname:"header"`
	FrameUnmber      uint64          `rosname:"frame_unmber"`
	FusionLevel      int8            `rosname:"fusion_level"`
	Status           int8            `rosname:"status"`
	Roll             float64         `rosname:"roll"`
	Pitch            float64         `rosname:"pitch"`
	Yaw              float64         `rosname:"yaw"`
	RollStd          float32         `rosname:"roll_std"`
	PitchStd         float32         `rosname:"pitch_std"`
	YawStd           float32         `rosname:"yaw_std"`
	Qw               float64         `rosname:"qw"`
	Qx               float64         `rosname:"qx"`
	Qy               float64         `rosname:"qy"`
	Qz               float64         `rosname:"qz"`
	AngularVelocityX float64         `rosname:"angular_velocity_x"`
	AngularVelocityY float64         `rosname:"angular_velocity_y"`
	AngularVelocityZ float64         `rosname:"angular_velocity_z"`
	Latitude         float64         `rosname:"latitude"`
	Longitude        float64         `rosname:"longitude"`
	Altitude         float64         `rosname:"altitude"`
	LatitudeStd      float32         `rosname:"latitude_std"`
	LongitudeStd     float32         `rosname:"longitude_std"`
	AltitudeStd      float32         `rosname:"altitude_std"`
	PositionX        float64         `rosname:"position_x"`
	PositionY        float64         `rosname:"position_y"`
	PositionZ        float64         `rosname:"position_z"`
	PositionXStd     float32         `rosname:"position_x_std"`
	PositionYStd     float32         `rosname:"position_y_std"`
	PositionZStd     float32         `rosname:"position_z_std"`
	VelocityX        float64         `rosname:"velocity_x"`
	VelocityY        float64         `rosname:"velocity_y"`
	VelocityZ        float64         `rosname:"velocity_z"`
	VelocityXStd     float32         `rosname:"velocity_x_std"`
	VelocityYStd     float32         `rosname:"velocity_y_std"`
	VelocityZStd     float32         `rosname:"velocity_z_std"`
	VelocityRx       float64         `rosname:"velocity_rx"`
	VelocityRy       float64         `rosname:"velocity_ry"`
	VelocityRz       float64         `rosname:"velocity_rz"`
	VelocityRxStd    float32         `rosname:"velocity_rx_std"`
	VelocityRyStd    float32         `rosname:"velocity_ry_std"`
	VelocityRzStd    float32         `rosname:"velocity_rz_std"`
	AccelX           float64         `rosname:"accel_x"`
	AccelY           float64         `rosname:"accel_y"`
	AccelZ           float64         `rosname:"accel_z"`
}