#ifndef CONTROLLER_H #define CONTROLLER_H #include #include #include class Node; class Actor; class Policy; class Controller { public: struct Initializer { const std::list& keywords; const std::string& message; }; explicit Controller(Initializer&& initializer); virtual ~Controller() = 0; virtual std::string interact(std::shared_ptr actor) = 0; virtual bool validateInput(const std::string& input_word) const final; virtual void setValidationPolicies(const std::list>& policies) final; struct ValidationResult { bool success = false; std::string validation_output; }; protected: virtual ValidationResult validatePolicies() const final; std::list _keywords; std::string _interaction_message; std::list> _validation_policies; }; #endif // CONTROLLER_H