#pragma once




#include "WHISPER/Messages/Message.hpp"
#include <SimCore/Messages/Track.hpp>
namespace SimCore 
{
    class GroundTruthTrack : public Track
    {
        public:
            GroundTruthTrack(WHISPER::SourceType src,SimCore::Identifier id,SimCore::TrackKind kind);

            virtual WHISPER::Message buildMessage(SimCore::Identifier parentID) override;

            /// set course
            void setEnvironment(SimCore::EntityKind);

            /// returns course
            SimCore::EntityKind getEnvironment();


            /**
            * @brief set the position of the track
            * @param Position object of the position class
            *
            */
            void setPosition(Position pos);

            /**
            * @brief set the position of the track
            * @param 3x double set the x,y,z coordinates direkt which causes that an
            * object of position class is created
            */
            void setPosition(double x, double y, double z);

            /**
            * @brief returns the position
            * @return object of position class
            *
            */
            Position getPostion();

            /// sets speed
            void setSpeed(double speed);

            /// set speed in knots
            void setSpeedinKnots(double knots);

            /// return sspeed
            double getSpeed();

            /// returns speed as knots
            double getSpeedinKnots();

            /// set course
            void setCourse(double course);

            /// returns course
            double getCourse();

            static GroundTruthTrack unpack(WHISPER::Message msg);

        private:
            //environment (AIR,SURFACE,SUBSURFACE,SPACE)
            SimCore::EntityKind environemnt_;
            /// position of the track
            Position position_;
            /// speed the track
            double speed_ = 0;
            /// course of the track
            double course_ = 0;




    };
}