#ifndef AST_MODULES_IMPORTER_HPP
#define AST_MODULES_IMPORTER_HPP

#include <language/ast/ASTNode.hpp>
#include <language/modules/ModuleRepository.hpp>

#include <set>
#include <string>

class SymbolTable;

class ASTModulesImporter
{
  std::set<std::string> m_imported_modules;
  SymbolTable& m_symbol_table;

  ModuleRepository m_module_repository;

  void _importModule(ASTNode& import_node);
  void _importAllModules(ASTNode& node);

 public:
  const ModuleRepository&
  moduleRepository() const
  {
    return m_module_repository;
  }

  ASTModulesImporter(ASTNode& root_node);

  ASTModulesImporter(const ASTModulesImporter&) = delete;

  ~ASTModulesImporter() = default;
};

#endif   // AST_MODULES_IMPORTER_HPP