#pragma once

#include <SimCore/data.hpp>
#include <string>
#include <SimCore/Identifier.hpp>
#include <SimCore/Messages/Protos/SimTrack.pb.h>


namespace SimCore
{
        class Emission
        {
            private:
            const SimCore::Identifier ID_;
            Data<std::string> name_;


            public:

            /// @brief 
            /// @param name 
            Emission(std::string name);

            /// @brief 
            /// @param name 
            /// @param id 
            Emission(std::string name, SimCore::Identifier id);


            /// @brief 
            /// @return 
            SimCore::Identifier getID() const;

            /// @brief 
            /// @return 
            std::string getName();


            Data<double> Frequency;
            Data<double> Range;
            Data<double> Bandwidth;
            Data<double> PulseWidth;
            Data<double> PulseRepitition;
            Data<double> RadiatedPower;
            Data<std::uint32_t> NumberOfBeams;
            Data<std::uint32_t> searchInterval;


            /// @brief 
            /// @param lhs 
            /// @param rhs 
            /// @return 
            friend bool operator==(const Emission &lhs,const Emission &rhs);

            /// @brief 
            /// @return 
            messages::SimTrack::Emission packEmission();

            /// @brief 
            /// @param emission 
            /// @return 
            static Emission unpackEmission(messages::SimTrack::Emission emission);

        };
} // namespace SimCore
