// Copyright 2017 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef STARBOARD_ANDROID_SHARED_INPUT_EVENTS_GENERATOR_H_
#define STARBOARD_ANDROID_SHARED_INPUT_EVENTS_GENERATOR_H_

#include <android/input.h>
#include <map>
#include <memory>
#include <vector>

#ifdef STARBOARD_INPUT_EVENTS_FILTER
#include "starboard/android/shared/internal/input_events_filter.h"
#endif

#include "starboard/input.h"
#include "starboard/shared/starboard/application.h"
#include "starboard/window.h"

namespace starboard {
namespace android {
namespace shared {

class InputEventsGenerator {
 public:
  typedef ::starboard::shared::starboard::Application::Event Event;
  typedef std::vector<std::unique_ptr<Event> > Events;

  explicit InputEventsGenerator(SbWindow window);
  virtual ~InputEventsGenerator();

  // Translates an Android input event into a series of Starboard application
  // events. The caller owns the new events and must delete them when done with
  // them.
  bool CreateInputEventsFromAndroidEvent(AInputEvent* android_event,
                                         Events* events);

  // Create press/unpress events from SbKey
  // (for use with CobaltA11yHelper injection)
  void CreateInputEventsFromSbKey(SbKey key, Events* events);

 private:
  enum FlatAxis {
    kLeftX,
    kLeftY,
    kRightX,
    kRightY,
    kNumAxes,
  };

  bool ProcessKeyEvent(AInputEvent* android_event, Events* events);
  bool ProcessPointerEvent(AInputEvent* android_event, Events* events);
  bool ProcessMotionEvent(AInputEvent* android_event, Events* events);
  void ProcessJoyStickEvent(FlatAxis axis,
                            int32_t motion_axis,
                            AInputEvent* android_event,
                            Events* events);
  void UpdateDeviceFlatMapIfNecessary(AInputEvent* android_event);

  void ProcessFallbackDPadEvent(SbInputEventType type,
                                SbKey key,
                                AInputEvent* android_event,
                                Events* events);
  void UpdateHatValuesAndPossiblySynthesizeKeyEvents(AInputEvent* android_event,
                                                     Events* events);

  SbWindow window_;

#ifdef STARBOARD_INPUT_EVENTS_FILTER
  internal::InputEventsFilter input_events_filter_;
#endif

  // Map the device id with joystick flat position.
  // Cache the flat area of joystick to avoid calling jni functions frequently.
  std::map<int32_t, std::vector<float> > device_flat_;

  // The current X/Y analog values of the "hat" (dpad on the game controller).
  float hat_value_[2];

  // The last known value of the left thumbstick, used to track when we should
  // generate key unpressed events for it.  We store values for horizontal and
  // vertical directions independently.
  SbKey left_thumbstick_key_pressed_[2];
};

}  // namespace shared
}  // namespace android
}  // namespace starboard

#endif  // STARBOARD_ANDROID_SHARED_INPUT_EVENTS_GENERATOR_H_
