// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "apps/moterm/key_util.h"

#include "base/logging.h"
#include "mojo/services/input_events/public/interfaces/input_events.mojom.h"
#include "mojo/services/input_events/public/interfaces/input_key_codes.mojom.h"

// TODO(vtl): Handle more stuff and verify that we're consistent about the
// sequences we generate.
std::string GetInputSequenceForKeyPressedEvent(const mojo::Event& key_event) {
  DCHECK_EQ(key_event.action, mojo::EVENT_TYPE_KEY_PRESSED);
  CHECK(key_event.key_data);
  const mojo::KeyData& key_data = *key_event.key_data;

  DVLOG(2) << "Key pressed:"
           << "\n  is_char = " << key_data.is_char
           << "\n  character = " << key_data.character
           << "\n  windows_key_code = " << key_data.windows_key_code
           << "\n  text = " << key_data.text
           << "\n  unmodified_text = " << key_data.unmodified_text;

  // We'll only deal with character events (which we'll get even if |character|
  // isn't set).
  if (!key_data.is_char)
    return std::string();

  // Use |character| if that's set.
  // TODO(vtl): Maybe we should use |text| instead, but it seems to be the same
  // as |character|. (The comments claim that |text| will have something for
  // backspace while |character| won't, but this does not appear to be true
  // currently.)
  if (key_data.character) {
    if (key_data.character >= 128) {
      // TODO(vtl): Need to UTF-8 encode.
      NOTIMPLEMENTED();
      return std::string();
    }
    return std::string(1, static_cast<char>(key_data.character));
  }

  // TODO(vtl): For some of these, we may need to handle modifiers (from
  // |event.flags|).
  switch (key_data.windows_key_code) {
    // Produces input sequence:
    case mojo::KEYBOARD_CODE_BACK:
      // Have backspace send DEL instead of BS.
      return std::string("\x7f");
    case mojo::KEYBOARD_CODE_ESCAPE:
      return std::string("\x1b");
    case mojo::KEYBOARD_CODE_PRIOR:
      return std::string("\x1b[5~");
    case mojo::KEYBOARD_CODE_NEXT:
      return std::string("\x1b[6~");
    case mojo::KEYBOARD_CODE_END:
      return std::string("\x1b[F");
    case mojo::KEYBOARD_CODE_HOME:
      return std::string("\x1b[H");
    case mojo::KEYBOARD_CODE_LEFT:
      return std::string("\x1b[D");
    case mojo::KEYBOARD_CODE_UP:
      return std::string("\x1b[A");
    case mojo::KEYBOARD_CODE_RIGHT:
      return std::string("\x1b[C");
    case mojo::KEYBOARD_CODE_DOWN:
      return std::string("\x1b[B");
    case mojo::KEYBOARD_CODE_INSERT:
      return std::string("\x1b[2~");
    case mojo::KEYBOARD_CODE_DELETE:
      return std::string("\x1b[3~");

    // Should have |character| set:
    case mojo::KEYBOARD_CODE_TAB:
    case mojo::KEYBOARD_CODE_RETURN:
    case mojo::KEYBOARD_CODE_SPACE:
    case mojo::KEYBOARD_CODE_NUM_0:
    case mojo::KEYBOARD_CODE_NUM_1:
    case mojo::KEYBOARD_CODE_NUM_2:
    case mojo::KEYBOARD_CODE_NUM_3:
    case mojo::KEYBOARD_CODE_NUM_4:
    case mojo::KEYBOARD_CODE_NUM_5:
    case mojo::KEYBOARD_CODE_NUM_6:
    case mojo::KEYBOARD_CODE_NUM_7:
    case mojo::KEYBOARD_CODE_NUM_8:
    case mojo::KEYBOARD_CODE_NUM_9:
    case mojo::KEYBOARD_CODE_A:
    case mojo::KEYBOARD_CODE_B:
    case mojo::KEYBOARD_CODE_C:
    case mojo::KEYBOARD_CODE_D:
    case mojo::KEYBOARD_CODE_E:
    case mojo::KEYBOARD_CODE_F:
    case mojo::KEYBOARD_CODE_G:
    case mojo::KEYBOARD_CODE_H:
    case mojo::KEYBOARD_CODE_I:
    case mojo::KEYBOARD_CODE_J:
    case mojo::KEYBOARD_CODE_K:
    case mojo::KEYBOARD_CODE_L:
    case mojo::KEYBOARD_CODE_M:
    case mojo::KEYBOARD_CODE_N:
    case mojo::KEYBOARD_CODE_O:
    case mojo::KEYBOARD_CODE_P:
    case mojo::KEYBOARD_CODE_Q:
    case mojo::KEYBOARD_CODE_R:
    case mojo::KEYBOARD_CODE_S:
    case mojo::KEYBOARD_CODE_T:
    case mojo::KEYBOARD_CODE_U:
    case mojo::KEYBOARD_CODE_V:
    case mojo::KEYBOARD_CODE_W:
    case mojo::KEYBOARD_CODE_X:
    case mojo::KEYBOARD_CODE_Y:
    case mojo::KEYBOARD_CODE_Z:
      // TODO(vtl): Actually, we won't get characters for Ctrl+<number> (and
      // probably other odd combinations).
      DLOG(WARNING) << "Expected character for key code "
                    << key_data.windows_key_code;
      break;

    // Purposely produce no input sequence:
    case mojo::KEYBOARD_CODE_SHIFT:
    case mojo::KEYBOARD_CODE_CONTROL:
    case mojo::KEYBOARD_CODE_MENU:
    case mojo::KEYBOARD_CODE_LSHIFT:
    case mojo::KEYBOARD_CODE_RSHIFT:
    case mojo::KEYBOARD_CODE_LCONTROL:
    case mojo::KEYBOARD_CODE_RCONTROL:
    case mojo::KEYBOARD_CODE_LMENU:
    case mojo::KEYBOARD_CODE_RMENU:
      break;

    // TODO(vtl): Figure these out.
    case mojo::KEYBOARD_CODE_CLEAR:
    case mojo::KEYBOARD_CODE_PAUSE:
    case mojo::KEYBOARD_CODE_CAPITAL:
    case mojo::KEYBOARD_CODE_KANA:  // A.k.a. |KEYBOARD_CODE_HANGUL|.
    case mojo::KEYBOARD_CODE_JUNJA:
    case mojo::KEYBOARD_CODE_FINAL:
    case mojo::KEYBOARD_CODE_HANJA:  // A.k.a. |KEYBOARD_CODE_KANJI|.
    case mojo::KEYBOARD_CODE_CONVERT:
    case mojo::KEYBOARD_CODE_NONCONVERT:
    case mojo::KEYBOARD_CODE_ACCEPT:
    case mojo::KEYBOARD_CODE_MODECHANGE:
    case mojo::KEYBOARD_CODE_SELECT:
    case mojo::KEYBOARD_CODE_PRINT:
    case mojo::KEYBOARD_CODE_EXECUTE:
    case mojo::KEYBOARD_CODE_SNAPSHOT:
    case mojo::KEYBOARD_CODE_HELP:
    case mojo::KEYBOARD_CODE_LWIN:  // A.k.a. |KEYBOARD_CODE_COMMAND|.
    case mojo::KEYBOARD_CODE_RWIN:
    case mojo::KEYBOARD_CODE_APPS:
    case mojo::KEYBOARD_CODE_SLEEP:
    case mojo::KEYBOARD_CODE_NUMPAD0:
    case mojo::KEYBOARD_CODE_NUMPAD1:
    case mojo::KEYBOARD_CODE_NUMPAD2:
    case mojo::KEYBOARD_CODE_NUMPAD3:
    case mojo::KEYBOARD_CODE_NUMPAD4:
    case mojo::KEYBOARD_CODE_NUMPAD5:
    case mojo::KEYBOARD_CODE_NUMPAD6:
    case mojo::KEYBOARD_CODE_NUMPAD7:
    case mojo::KEYBOARD_CODE_NUMPAD8:
    case mojo::KEYBOARD_CODE_NUMPAD9:
    case mojo::KEYBOARD_CODE_MULTIPLY:
    case mojo::KEYBOARD_CODE_ADD:
    case mojo::KEYBOARD_CODE_SEPARATOR:
    case mojo::KEYBOARD_CODE_SUBTRACT:
    case mojo::KEYBOARD_CODE_DECIMAL:
    case mojo::KEYBOARD_CODE_DIVIDE:
    case mojo::KEYBOARD_CODE_F1:
    case mojo::KEYBOARD_CODE_F2:
    case mojo::KEYBOARD_CODE_F3:
    case mojo::KEYBOARD_CODE_F4:
    case mojo::KEYBOARD_CODE_F5:
    case mojo::KEYBOARD_CODE_F6:
    case mojo::KEYBOARD_CODE_F7:
    case mojo::KEYBOARD_CODE_F8:
    case mojo::KEYBOARD_CODE_F9:
    case mojo::KEYBOARD_CODE_F10:
    case mojo::KEYBOARD_CODE_F11:
    case mojo::KEYBOARD_CODE_F12:
    case mojo::KEYBOARD_CODE_F13:
    case mojo::KEYBOARD_CODE_F14:
    case mojo::KEYBOARD_CODE_F15:
    case mojo::KEYBOARD_CODE_F16:
    case mojo::KEYBOARD_CODE_F17:
    case mojo::KEYBOARD_CODE_F18:
    case mojo::KEYBOARD_CODE_F19:
    case mojo::KEYBOARD_CODE_F20:
    case mojo::KEYBOARD_CODE_F21:
    case mojo::KEYBOARD_CODE_F22:
    case mojo::KEYBOARD_CODE_F23:
    case mojo::KEYBOARD_CODE_F24:
    case mojo::KEYBOARD_CODE_NUMLOCK:
    case mojo::KEYBOARD_CODE_SCROLL:
    case mojo::KEYBOARD_CODE_BROWSER_BACK:
    case mojo::KEYBOARD_CODE_BROWSER_FORWARD:
    case mojo::KEYBOARD_CODE_BROWSER_REFRESH:
    case mojo::KEYBOARD_CODE_BROWSER_STOP:
    case mojo::KEYBOARD_CODE_BROWSER_SEARCH:
    case mojo::KEYBOARD_CODE_BROWSER_FAVORITES:
    case mojo::KEYBOARD_CODE_BROWSER_HOME:
    case mojo::KEYBOARD_CODE_VOLUME_MUTE:
    case mojo::KEYBOARD_CODE_VOLUME_DOWN:
    case mojo::KEYBOARD_CODE_VOLUME_UP:
    case mojo::KEYBOARD_CODE_MEDIA_NEXT_TRACK:
    case mojo::KEYBOARD_CODE_MEDIA_PREV_TRACK:
    case mojo::KEYBOARD_CODE_MEDIA_STOP:
    case mojo::KEYBOARD_CODE_MEDIA_PLAY_PAUSE:
    case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_MAIL:
    case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_MEDIA_SELECT:
    case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_APP1:
    case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_APP2:
    case mojo::KEYBOARD_CODE_OEM_1:
    case mojo::KEYBOARD_CODE_OEM_PLUS:
    case mojo::KEYBOARD_CODE_OEM_COMMA:
    case mojo::KEYBOARD_CODE_OEM_MINUS:
    case mojo::KEYBOARD_CODE_OEM_PERIOD:
    case mojo::KEYBOARD_CODE_OEM_2:
    case mojo::KEYBOARD_CODE_OEM_3:
    case mojo::KEYBOARD_CODE_OEM_4:
    case mojo::KEYBOARD_CODE_OEM_5:
    case mojo::KEYBOARD_CODE_OEM_6:
    case mojo::KEYBOARD_CODE_OEM_7:
    case mojo::KEYBOARD_CODE_OEM_8:
    case mojo::KEYBOARD_CODE_OEM_102:
    case mojo::KEYBOARD_CODE_PROCESSKEY:
    case mojo::KEYBOARD_CODE_PACKET:
    case mojo::KEYBOARD_CODE_DBE_SBCSCHAR:
    case mojo::KEYBOARD_CODE_DBE_DBCSCHAR:
    case mojo::KEYBOARD_CODE_ATTN:
    case mojo::KEYBOARD_CODE_CRSEL:
    case mojo::KEYBOARD_CODE_EXSEL:
    case mojo::KEYBOARD_CODE_EREOF:
    case mojo::KEYBOARD_CODE_PLAY:
    case mojo::KEYBOARD_CODE_ZOOM:
    case mojo::KEYBOARD_CODE_NONAME:
    case mojo::KEYBOARD_CODE_PA1:
    case mojo::KEYBOARD_CODE_OEM_CLEAR:
    case mojo::KEYBOARD_CODE_UNKNOWN:
    case mojo::KEYBOARD_CODE_ALTGR:
      NOTIMPLEMENTED() << "Key code " << key_data.windows_key_code;
      break;

    default:
      LOG(WARNING) << "Unknown key code " << key_data.windows_key_code;
      break;
  }
  return std::string();
}
