#pragma once

// STD/STL
#include <mutex>
#include <string>

// BaseClass
#include <RobotAPI/libraries/armem/server/segment/SpecializedSegment.h>

// ArmarX
#include <RobotAPI/libraries/aron/common/aron/trajectory.aron.generated.h>

namespace armarx::armem::server::motions::mps::segment
{
    class MPSegment : public armem::server::segment::SpecializedProviderSegment
    {
        using Base = armem::server::segment::SpecializedProviderSegment;

    public:
        MPSegment(armem::server::MemoryToIceAdapter& iceMemory);

        virtual void defineProperties(armarx::PropertyDefinitionsPtr defs, const std::string& prefix = "") override;
        virtual void init() override;
        virtual void onConnect();

    private:
        int loadByMotionFinder(const std::string&);
        void loadSingleMotionFinder(const std::string&, const std::string &entityName, bool taskspace);

    private:
        struct Properties
        {
            std::string motionsPackage = "PriorKnowledgeData";
            bool loadFromMotionsPackage = true;
        };
        Properties properties;
    };
}