#ifndef SRC_CONTACTNETWORK_HH
#define SRC_CONTACTNETWORK_HH

#include "levelcontactnetwork.hh"

template <class GridType, int dim> class ContactNetwork {
  public:
    using LevelContactNetwork = LevelContactNetwork<GridType, dim>;

  private:
   std::vector<std::shared_ptr<LevelContactNetwork>> levelContactNetworks_;

  public:
        ContactNetwork() {}

        void addLevelContactNetwork(std::shared_ptr<LevelContactNetwork> levelContactNetwork);
        const std::shared_ptr<LevelContactNetwork>& addLevelContactNetwork(int nBodies, int nCouplings, int level);

        void assemble();

        const std::shared_ptr<LevelContactNetwork>& levelContactNetwork(size_t level) const {
            return levelContactNetworks_[level];
        }

        void resize(size_t size) {
            levelContactNetworks_.resize(size);
        }

        size_t size() const {
            return levelContactNetworks_.size();
        }

        size_t maxLevel() const {
            return size()-1;
		} 
};
#endif