// __author__ = Juan Carlos De Abreu (jcabreur@gmail.com)

#ifndef DATA_SCENE_NODE_H__
#define DATA_SCENE_NODE_H__
 
#include "Data.h"

BEGIN_TEG_NAMESPACE();

class ISceneNode;

class DataSceneNode : public IData {
public:
  // Attributes.
  SmartPointer<ISceneNode> value;

  // DataSceneNode cosntructor.
  DataSceneNode(SmartPointer<ISceneNode> _value);

  // DataSceneNode destructor.
  ~DataSceneNode();

  // Methods.
  SmartPointer<IData> resolve(
      std::map<std::string, SmartPointer<IData>>& variables);
  SmartPointer<IData> getAttribute(std::string attrName);
  SmartPointer<IData> getMethod(
      SmartPointer<IData> elem,
      std::map<std::string, SmartPointer<IData>>& variables);
  AUTO_SIZE();
};

SmartPointer<DataSceneNode> castToDataSceneNode(spDATA d);
SmartPointer<ISceneNode> castToSceneNode(SmartPointer<IData> d);

END_TEG_NAMESPACE();

#endif  // DATA_SCENE_NODE_H__
