#pragma once

#include "ccl/lang/LexicalTerm.h"
#include "ccl/lang/EntityTermContext.hpp"

class MockContext : public ccl::lang::EntityTermContext {
private:
  std::unordered_map<std::string, ccl::lang::LexicalTerm> terms{};

public:
  void Clear() noexcept { terms.clear(); }
  void Insert(const std::string& entity, const ccl::lang::LexicalTerm& term) {
    terms.emplace(std::pair{ entity , term });
  }

  bool Contains(const std::string& entity) const override {
    return terms.count(entity) > 0;
  }
  const ccl::lang::LexicalTerm* At(const std::string& entity) const override {
    if (!Contains(entity)) {
      return nullptr;
    } else {
      return &terms.at(entity);
    }
  }
};