#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_EXPRESSION_EXPRESSION_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_EXPRESSION_EXPRESSION_H_

#include <memory>
#include <string>
#include <utility>

#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"

namespace milotic_tlbmc {

class Expression {
 public:
  virtual ~Expression() = default;
  virtual absl::StatusOr<double> Evaluate(
      const absl::flat_hash_map<std::string, double>& variable_maps) const = 0;
  virtual void GetRequiredVariables(
      absl::flat_hash_set<std::string>& variable_names) const = 0;
};

// Parses an expression string into an Expression object.
absl::StatusOr<std::unique_ptr<Expression>> Parse(absl::string_view expression);

// Exposed for testing only. Do not use these functions directly.
namespace expression::internal {

absl::string_view ConsumeWhitespace(absl::string_view s);
char Peek(absl::string_view s);
std::pair<absl::string_view, bool> Consume(absl::string_view s, char c);
absl::StatusOr<std::pair<absl::string_view, std::unique_ptr<Expression>>>
ParsePrimary(absl::string_view s);
absl::StatusOr<std::pair<absl::string_view, std::unique_ptr<Expression>>>
ParseExponent(absl::string_view s);
absl::StatusOr<std::pair<absl::string_view, std::unique_ptr<Expression>>>
ParseFactor(absl::string_view s);
absl::StatusOr<std::pair<absl::string_view, std::unique_ptr<Expression>>>
ParseTerm(absl::string_view s);
absl::StatusOr<std::pair<absl::string_view, std::unique_ptr<Expression>>>
ParseExpression(absl::string_view s);
absl::StatusOr<std::pair<absl::string_view, std::unique_ptr<Expression>>>
ParseConditionalOp(absl::string_view s);
}  // namespace expression::internal
}  // namespace milotic_tlbmc

#endif  // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_EXPRESSION_EXPRESSION_H_
