/*
 * SPDX-FileCopyrightText: 2025 Copyright contributors to the cppTango project
 *
 * SPDX-License-Identifier: LGPL-3.0-or-later
 */

#ifndef TANGO_INTERNAL_SERVER_TELEMETRYCMDS_H
#define TANGO_INTERNAL_SERVER_TELEMETRYCMDS_H

#include <tango/server/Command.h>

namespace Tango
{
#ifdef TANGO_USE_TELEMETRY

//=============================================================================
//
//            The StartTelemetry class
//
// description:  Class implementing the StartTelemetry command.
//
//=============================================================================
class StartTelemetry : public Command
{
  public:
    StartTelemetry(const char *cmd_name, Tango::CmdArgType in, Tango::CmdArgType out, const std::string &in_desc);

    ~StartTelemetry() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The StopTelemetry class
//
// description:  Class implementing the StopTelemetry command.
//
//=============================================================================
class StopTelemetry : public Command
{
  public:
    StopTelemetry(const char *cmd_name, Tango::CmdArgType in, Tango::CmdArgType out, const std::string &in_desc);

    ~StopTelemetry() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The IsTelemetryEnabled class
//
// description:  Class implementing the IsTelemetryEnabled command.
//
//=============================================================================
class IsTelemetryEnabled : public Command
{
  public:
    IsTelemetryEnabled(const char *cmd_name,
                       Tango::CmdArgType in,
                       Tango::CmdArgType out,
                       const std::string &in_desc,
                       const std::string &out_desc);

    ~IsTelemetryEnabled() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The SetTelemetryTopics class
//
// description:  Class implementing the SetTelemetryTopics command.
//
//=============================================================================
class SetTelemetryTopics : public Command
{
  public:
    SetTelemetryTopics(const char *cmd_name, Tango::CmdArgType in, Tango::CmdArgType out, const std::string &in_desc);

    ~SetTelemetryTopics() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The GetTelemetryTopics class
//
// description:  Class implementing the GetTelemetryTopics command.
//
//=============================================================================
class GetTelemetryTopics : public Command
{
  public:
    GetTelemetryTopics(const char *cmd_name,
                       Tango::CmdArgType in,
                       Tango::CmdArgType out,
                       const std::string &in_desc,
                       const std::string &out_desc);

    ~GetTelemetryTopics() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The SetTelemetryTracing class
//
// description:  Class implementing the SetTelemetryTracing command.
//
//=============================================================================
class SetTelemetryTracing : public Command
{
  public:
    SetTelemetryTracing(const char *cmd_name, Tango::CmdArgType in, Tango::CmdArgType out, const std::string &in_desc);

    ~SetTelemetryTracing() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The GetTelemetryTracing class
//
// description:  Class implementing the GetTelemetryTracing command.
//
//=============================================================================
class GetTelemetryTracing : public Command
{
  public:
    GetTelemetryTracing(const char *cmd_name,
                        Tango::CmdArgType in,
                        Tango::CmdArgType out,
                        const std::string &in_desc,
                        const std::string &out_desc);

    ~GetTelemetryTracing() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The SetTelemetryTracingEndpoints class
//
// description:  Class implementing the SetTelemetryTracingEndpoints command.
//
//=============================================================================
class SetTelemetryTracingEndpoints : public Command
{
  public:
    SetTelemetryTracingEndpoints(const char *cmd_name,
                                 Tango::CmdArgType in,
                                 Tango::CmdArgType out,
                                 const std::string &in_desc);

    ~SetTelemetryTracingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The GetTelemetryTracingEndpoints class
//
// description:  Class implementing the GetTelemetryTracingEndpoints command.
//
//=============================================================================
class GetTelemetryTracingEndpoints : public Command
{
  public:
    GetTelemetryTracingEndpoints(const char *cmd_name,
                                 Tango::CmdArgType in,
                                 Tango::CmdArgType out,
                                 const std::string &in_desc,
                                 const std::string &out_desc);

    ~GetTelemetryTracingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The AddTelemetryTracingEndpoints class
//
// description:  Class implementing the AddTelemetryTracingEndpoints command.
//
//=============================================================================
class AddTelemetryTracingEndpoints : public Command
{
  public:
    AddTelemetryTracingEndpoints(const char *cmd_name,
                                 Tango::CmdArgType in,
                                 Tango::CmdArgType out,
                                 const std::string &in_desc);

    ~AddTelemetryTracingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The RemoveTelemetryTracingEndpoints class
//
// description:  Class implementing the RemoveTelemetryTracingEndpoints command.
//
//=============================================================================
class RemoveTelemetryTracingEndpoints : public Command
{
  public:
    RemoveTelemetryTracingEndpoints(const char *cmd_name,
                                    Tango::CmdArgType in,
                                    Tango::CmdArgType out,
                                    const std::string &in_desc);

    ~RemoveTelemetryTracingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The SetTelemetryLogging class
//
// description:  Class implementing the SetTelemetryLogging command.
//
//=============================================================================
class SetTelemetryLogging : public Command
{
  public:
    SetTelemetryLogging(const char *cmd_name, Tango::CmdArgType in, Tango::CmdArgType out, const std::string &in_desc);

    ~SetTelemetryLogging() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The GetTelemetryLogging class
//
// description:  Class implementing the GetTelemetryLogging command.
//
//=============================================================================
class GetTelemetryLogging : public Command
{
  public:
    GetTelemetryLogging(const char *cmd_name,
                        Tango::CmdArgType in,
                        Tango::CmdArgType out,
                        const std::string &in_desc,
                        const std::string &out_desc);

    ~GetTelemetryLogging() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The SetTelemetryLoggingEndpoints class
//
// description:  Class implementing the SetTelemetryLoggingEndpoints command.
//
//=============================================================================
class SetTelemetryLoggingEndpoints : public Command
{
  public:
    SetTelemetryLoggingEndpoints(const char *cmd_name,
                                 Tango::CmdArgType in,
                                 Tango::CmdArgType out,
                                 const std::string &in_desc);

    ~SetTelemetryLoggingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The GetTelemetryLoggingEndpoints class
//
// description:  Class implementing the GetTelemetryLoggingEndpoints command.
//
//=============================================================================
class GetTelemetryLoggingEndpoints : public Command
{
  public:
    GetTelemetryLoggingEndpoints(const char *cmd_name,
                                 Tango::CmdArgType in,
                                 Tango::CmdArgType out,
                                 const std::string &in_desc,
                                 const std::string &out_desc);

    ~GetTelemetryLoggingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The AddTelemetryLoggingEndpoints class
//
// description:  Class implementing the AddTelemetryLoggingEndpoints command.
//
//=============================================================================
class AddTelemetryLoggingEndpoints : public Command
{
  public:
    AddTelemetryLoggingEndpoints(const char *cmd_name,
                                 Tango::CmdArgType in,
                                 Tango::CmdArgType out,
                                 const std::string &in_desc);

    ~AddTelemetryLoggingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};

//=============================================================================
//
//            The RemoveTelemetryLoggingEndpoints class
//
// description:  Class implementing the RemoveTelemetryLoggingEndpoints command.
//
//=============================================================================
class RemoveTelemetryLoggingEndpoints : public Command
{
  public:
    RemoveTelemetryLoggingEndpoints(const char *cmd_name,
                                    Tango::CmdArgType in,
                                    Tango::CmdArgType out,
                                    const std::string &in_desc);

    ~RemoveTelemetryLoggingEndpoints() override { }

    CORBA::Any *execute(DeviceImpl *device, const CORBA::Any &in_any) override;
};
#endif

} // namespace Tango

#endif // TANGO_INTERNAL_SERVER_TELEMETRYCMDS_H
