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

#include <tango/client/AttributeAlarmInfo.h>
#include <tango/client/AttributeEventInfo.h>
#include <tango/client/AttributeInfo.h>
#include <tango/client/AttrMemorizedType.h>
#include <tango/common/tango_const.h>

#include <string>
#include <vector>

namespace Tango
{
/**
 * Extended attribute configuration data
 *
 * @headerfile tango.h
 * @ingroup Client
 */
struct AttributeInfoEx : public AttributeInfo
{
    std::string root_attr_name;              ///< Root attribute name (in case of forwarded attribute)
    AttrMemorizedType memorized;             ///< The attribute memorization type
    std::vector<std::string> enum_labels;    ///< Enumerated attribute labels
    AttributeAlarmInfo alarms;               ///< The attribute alarms
    AttributeEventInfo events;               ///< The attribute events configuration
    std::vector<std::string> sys_extensions; ///< Future extensions

    /// @privatesection
    AttributeInfoEx &operator=(const AttributeConfig_2 *);
    AttributeInfoEx &operator=(const AttributeConfig_3 *);
    AttributeInfoEx &operator=(const AttributeConfig_5 *);

    friend std::ostream &operator<<(std::ostream &, const AttributeInfoEx &);
    bool operator==(const AttributeInfoEx &);
};

/**
 * vector of AttributeInfoEx structure
 *
 * @headerfile tango.h
 * @ingroup Client
 */
using AttributeInfoListEx = std::vector<AttributeInfoEx>;
} // namespace Tango
#endif
