#ifndef ENGINE_INPUT_EVENT_H
#define ENGINE_INPUT_EVENT_H

#include "base/log.h"
#include "base/vecmath.h"

namespace eng {

class InputEvent {
 public:
  enum Type {
    kInvalid,
    kDragStart,
    kDrag,
    kDragEnd,
    kDragCancel,
    kNavigateBack,
    kKeyPress,
    kType_Max  // Not a type.
  };

  InputEvent(Type type, size_t pointer_id)
      : type_(type), pointer_id_(pointer_id) {}
  InputEvent(Type type, size_t pointer_id, const base::Vector2f& vec)
      : type_(type), pointer_id_(pointer_id), vec_(vec) {}
  InputEvent(Type type) : type_(type) {}
  InputEvent(Type type, char key) : type_(type), key_(key) {}
  ~InputEvent() = default;

  Type GetType() const { return type_; }

  size_t GetPointerId() const { return pointer_id_; }

  base::Vector2f GetVector() const { return vec_; }

  char GetKeyPress() const { return key_; }

 private:
  Type type_ = kInvalid;
  size_t pointer_id_ = 0;
  base::Vector2f vec_ = {0, 0};
  char key_ = 0;
};

}  // namespace eng

#endif  // ENGINE_INPUT_EVENT_H