#pragma once

#include "Common"

#include <osgEarth/URI>
#include <osgEarth/ObjectIndex>
#include <osg/Matrixd>

namespace osgEarth {
   namespace Buildings
   {
      using namespace osgEarth;

      class OSGEARTHBUILDINGS_EXPORT ExternalModel : public osg::Object
      {
      public:

         ExternalModel();
         ExternalModel(const ExternalModel& rhs, const osg::CopyOp& copyop);
         ExternalModel& operator=(const ExternalModel& rhs);

         std::string modelName;
         osg::Matrixd xform;
         osgEarth::ObjectID objectId;

         META_Object(osgEarth::Buildings, ExternalModel);

         const std::string & getmodelName() const { return modelName; }
         void setmodelName(const std::string & name) { modelName = name; }

         const osg::Matrixd & getxform() const { return xform; }
         void setxform(const osg::Matrixd & mat) { xform = mat; }

         const osgEarth::ObjectID& getobjectId() const { return objectId; }
         void setobjectId(const osgEarth::ObjectID& id) { objectId = id; }
      };

      /**
       * Container for VRV indirect processor.
       */
      class ExternalModelNode : public osg::Node
      {
      public:
         ExternalModelNode() { ; }
         ExternalModelNode(const ExternalModelNode& rhs, const osg::CopyOp& copyop);

         META_Node(osgEarth::Buildings, ExternalModelNode);
         
         const std::vector<osg::ref_ptr<ExternalModel> >  & getvectorExternalModels() const { return vectorExternalModels; }
         void setvectorExternalModels(std::vector<osg::ref_ptr<ExternalModel> > & vec) { vectorExternalModels = vec; }

         std::vector<osg::ref_ptr<ExternalModel> > vectorExternalModels;
      };

   }
}