/**
 * @license
 * Copyright 2021 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

/** Enum for all special shortcuts */
import {Binding, ComboKey, Key, Modifier} from '../../utils/dom-util';

export enum SPECIAL_SHORTCUT {
  DOC_ONLY = 'DOC_ONLY',
  GO_KEY = 'GO_KEY',
  V_KEY = 'V_KEY',
}

/**
 * Enum for all shortcut sections, where that shortcut should be applied to.
 */
export enum ShortcutSection {
  ACTIONS = 'Actions',
  DIFFS = 'Diffs',
  EVERYWHERE = 'Global Shortcuts',
  FILE_LIST = 'File list',
  NAVIGATION = 'Navigation',
  REPLY_DIALOG = 'Reply dialog',
}

/**
 * Enum for all possible shortcut names.
 */
export enum Shortcut {
  OPEN_SHORTCUT_HELP_DIALOG = 'OPEN_SHORTCUT_HELP_DIALOG',
  GO_TO_USER_DASHBOARD = 'GO_TO_USER_DASHBOARD',
  GO_TO_OPENED_CHANGES = 'GO_TO_OPENED_CHANGES',
  GO_TO_MERGED_CHANGES = 'GO_TO_MERGED_CHANGES',
  GO_TO_ABANDONED_CHANGES = 'GO_TO_ABANDONED_CHANGES',
  GO_TO_WATCHED_CHANGES = 'GO_TO_WATCHED_CHANGES',
  GO_TO_REPOS = 'GO_TO_REPOS',
  GO_TO_GROUPS = 'GO_TO_GROUPS',

  CURSOR_NEXT_CHANGE = 'CURSOR_NEXT_CHANGE',
  CURSOR_PREV_CHANGE = 'CURSOR_PREV_CHANGE',
  OPEN_CHANGE = 'OPEN_CHANGE',
  NEXT_PAGE = 'NEXT_PAGE',
  PREV_PAGE = 'PREV_PAGE',
  TOGGLE_CHANGE_STAR = 'TOGGLE_CHANGE_STAR',
  REFRESH_CHANGE_LIST = 'REFRESH_CHANGE_LIST',
  OPEN_SUBMIT_DIALOG = 'OPEN_SUBMIT_DIALOG',
  TOGGLE_ATTENTION_SET = 'TOGGLE_ATTENTION_SET',

  OPEN_REPLY_DIALOG = 'OPEN_REPLY_DIALOG',
  OPEN_DOWNLOAD_DIALOG = 'OPEN_DOWNLOAD_DIALOG',
  OPEN_COPY_LINKS_DROPDOWN = 'OPEN_COPY_LINKS_DROPDOWN',
  EXPAND_ALL_MESSAGES = 'EXPAND_ALL_MESSAGES',
  COLLAPSE_ALL_MESSAGES = 'COLLAPSE_ALL_MESSAGES',
  UP_TO_DASHBOARD = 'UP_TO_DASHBOARD',
  UP_TO_CHANGE = 'UP_TO_CHANGE',
  TOGGLE_DIFF_MODE = 'TOGGLE_DIFF_MODE',
  REFRESH_CHANGE = 'REFRESH_CHANGE',
  EDIT_TOPIC = 'EDIT_TOPIC',
  DIFF_AGAINST_BASE = 'DIFF_AGAINST_BASE',
  DIFF_AGAINST_LATEST = 'DIFF_AGAINST_LATEST',
  DIFF_BASE_AGAINST_LEFT = 'DIFF_BASE_AGAINST_LEFT',
  DIFF_RIGHT_AGAINST_LATEST = 'DIFF_RIGHT_AGAINST_LATEST',
  DIFF_BASE_AGAINST_LATEST = 'DIFF_BASE_AGAINST_LATEST',

  NEXT_LINE = 'NEXT_LINE',
  PREV_LINE = 'PREV_LINE',
  VISIBLE_LINE = 'VISIBLE_LINE',
  NEXT_CHUNK = 'NEXT_CHUNK',
  PREV_CHUNK = 'PREV_CHUNK',
  TOGGLE_ALL_DIFF_CONTEXT = 'TOGGLE_ALL_DIFF_CONTEXT',
  NEXT_COMMENT_THREAD = 'NEXT_COMMENT_THREAD',
  PREV_COMMENT_THREAD = 'PREV_COMMENT_THREAD',
  EXPAND_ALL_COMMENT_THREADS = 'EXPAND_ALL_COMMENT_THREADS',
  COLLAPSE_ALL_COMMENT_THREADS = 'COLLAPSE_ALL_COMMENT_THREADS',
  LEFT_PANE = 'LEFT_PANE',
  RIGHT_PANE = 'RIGHT_PANE',
  TOGGLE_LEFT_PANE = 'TOGGLE_LEFT_PANE',
  NEW_COMMENT = 'NEW_COMMENT',
  SAVE_COMMENT = 'SAVE_COMMENT',
  OPEN_DIFF_PREFS = 'OPEN_DIFF_PREFS',
  TOGGLE_DIFF_REVIEWED = 'TOGGLE_DIFF_REVIEWED',

  NEXT_FILE = 'NEXT_FILE',
  PREV_FILE = 'PREV_FILE',
  NEXT_FILE_WITH_COMMENTS = 'NEXT_FILE_WITH_COMMENTS',
  PREV_FILE_WITH_COMMENTS = 'PREV_FILE_WITH_COMMENTS',
  NEXT_UNREVIEWED_FILE = 'NEXT_UNREVIEWED_FILE',
  CURSOR_NEXT_FILE = 'CURSOR_NEXT_FILE',
  CURSOR_PREV_FILE = 'CURSOR_PREV_FILE',
  OPEN_FILE = 'OPEN_FILE',
  TOGGLE_FILE_REVIEWED = 'TOGGLE_FILE_REVIEWED',
  TOGGLE_ALL_INLINE_DIFFS = 'TOGGLE_ALL_INLINE_DIFFS',
  TOGGLE_INLINE_DIFF = 'TOGGLE_INLINE_DIFF',
  TOGGLE_HIDE_ALL_COMMENT_THREADS_AND_CODE_POINTERS = 'TOGGLE_HIDE_ALL_COMMENT_THREADS_AND_CODE_POINTERS',
  TOGGLE_HIDE_CHECK_CODE_POINTERS = 'TOGGLE_HIDE_CHECK_CODE_POINTERS',
  OPEN_FILE_LIST = 'OPEN_FILE_LIST',

  OPEN_FIRST_FILE = 'OPEN_FIRST_FILE',
  OPEN_LAST_FILE = 'OPEN_LAST_FILE',

  SEARCH = 'SEARCH',
  EMOJI_DROPDOWN = 'EMOJI_DROPDOWN',
  MENTIONS_DROPDOWN = 'MENTIONS_DROPDOWN',
  TOGGLE_BLAME = 'TOGGLE_BLAME',

  TOGGLE_CHECKBOX = 'TOGGLE_CHECKBOX',
}

export interface ShortcutHelpItem {
  shortcut: Shortcut;
  text: string;
  bindings: Binding[];
}

export function createShortcutConfig() {
  const config = new Map<ShortcutSection, ShortcutHelpItem[]>();
  function describe(
    shortcut: Shortcut,
    section: ShortcutSection,
    text: string,
    binding: Binding,
    ...moreBindings: Binding[]
  ) {
    if (!config.has(section)) {
      config.set(section, []);
    }
    const shortcuts = config.get(section);
    if (shortcuts) {
      shortcuts.push({shortcut, text, bindings: [binding, ...moreBindings]});
    }
  }

  describe(Shortcut.SEARCH, ShortcutSection.EVERYWHERE, 'Search', {key: '/'});
  describe(
    Shortcut.OPEN_SHORTCUT_HELP_DIALOG,
    ShortcutSection.EVERYWHERE,
    'Show this dialog',
    {key: '?'}
  );
  describe(
    Shortcut.GO_TO_USER_DASHBOARD,
    ShortcutSection.EVERYWHERE,
    'Go to User Dashboard',
    {key: 'i', combo: ComboKey.G}
  );
  describe(
    Shortcut.GO_TO_OPENED_CHANGES,
    ShortcutSection.EVERYWHERE,
    'Go to Opened Changes',
    {key: 'o', combo: ComboKey.G}
  );
  describe(
    Shortcut.GO_TO_MERGED_CHANGES,
    ShortcutSection.EVERYWHERE,
    'Go to Merged Changes',
    {key: 'm', combo: ComboKey.G}
  );
  describe(
    Shortcut.GO_TO_ABANDONED_CHANGES,
    ShortcutSection.EVERYWHERE,
    'Go to Abandoned Changes',
    {key: 'a', combo: ComboKey.G}
  );
  describe(
    Shortcut.GO_TO_WATCHED_CHANGES,
    ShortcutSection.EVERYWHERE,
    'Go to Watched Changes',
    {key: 'w', combo: ComboKey.G}
  );
  describe(
    Shortcut.GO_TO_REPOS,
    ShortcutSection.EVERYWHERE,
    'Go to Repositories',
    {key: 'r', combo: ComboKey.G}
  );
  describe(Shortcut.GO_TO_GROUPS, ShortcutSection.EVERYWHERE, 'Go to Groups', {
    key: 'g',
    combo: ComboKey.G,
  });
  describe(
    Shortcut.TOGGLE_CHECKBOX,
    ShortcutSection.ACTIONS,
    'Toggle checkbox',
    {key: 'x'}
  );
  describe(
    Shortcut.CURSOR_NEXT_CHANGE,
    ShortcutSection.ACTIONS,
    'Select next change',
    {key: 'j', allowRepeat: true}
  );
  describe(
    Shortcut.CURSOR_PREV_CHANGE,
    ShortcutSection.ACTIONS,
    'Select previous change',
    {key: 'k', allowRepeat: true}
  );
  describe(
    Shortcut.OPEN_CHANGE,
    ShortcutSection.ACTIONS,
    'Show selected change',
    {key: 'o'}
  );
  describe(
    Shortcut.NEXT_PAGE,
    ShortcutSection.ACTIONS,
    'Go to next page',
    {key: 'n'},
    {key: ']'}
  );
  describe(
    Shortcut.PREV_PAGE,
    ShortcutSection.ACTIONS,
    'Go to previous page',
    {key: 'p'},
    {key: '['}
  );
  describe(
    Shortcut.OPEN_REPLY_DIALOG,
    ShortcutSection.ACTIONS,
    'Open reply dialog to publish comments and add reviewers',
    {key: 'a'}
  );
  describe(
    Shortcut.OPEN_DOWNLOAD_DIALOG,
    ShortcutSection.ACTIONS,
    'Open download overlay',
    {key: 'd'}
  );
  describe(
    Shortcut.OPEN_COPY_LINKS_DROPDOWN,
    ShortcutSection.ACTIONS,
    'Open link dialog',
    {key: 'l'}
  );
  describe(
    Shortcut.EXPAND_ALL_MESSAGES,
    ShortcutSection.ACTIONS,
    'Expand all messages',
    {key: 'x'}
  );
  describe(
    Shortcut.COLLAPSE_ALL_MESSAGES,
    ShortcutSection.ACTIONS,
    'Collapse all messages',
    {key: 'z'}
  );
  describe(
    Shortcut.REFRESH_CHANGE,
    ShortcutSection.ACTIONS,
    'Reload the change at the latest patch',
    {key: 'R'}
  );
  describe(
    Shortcut.TOGGLE_FILE_REVIEWED,
    ShortcutSection.ACTIONS,
    'Toggle review flag on selected file',
    {key: 'r'}
  );
  describe(
    Shortcut.REFRESH_CHANGE_LIST,
    ShortcutSection.ACTIONS,
    'Refresh list of changes',
    {key: 'R'}
  );
  describe(
    Shortcut.TOGGLE_CHANGE_STAR,
    ShortcutSection.ACTIONS,
    'Star/unstar change',
    {key: 's'}
  );
  describe(
    Shortcut.OPEN_SUBMIT_DIALOG,
    ShortcutSection.ACTIONS,
    'Open submit dialog',
    {key: 'S'}
  );
  describe(
    Shortcut.TOGGLE_ATTENTION_SET,
    ShortcutSection.ACTIONS,
    'Toggle attention set status',
    {key: 'T'}
  );
  describe(Shortcut.EDIT_TOPIC, ShortcutSection.ACTIONS, 'Add a change topic', {
    key: 't',
  });
  describe(
    Shortcut.DIFF_AGAINST_BASE,
    ShortcutSection.DIFFS,
    'Diff against base',
    {key: Key.DOWN, combo: ComboKey.V},
    {key: 's', combo: ComboKey.V}
  );
  describe(
    Shortcut.DIFF_AGAINST_LATEST,
    ShortcutSection.DIFFS,
    'Diff against latest patchset',
    {key: Key.UP, combo: ComboKey.V},
    {key: 'w', combo: ComboKey.V}
  );
  describe(
    Shortcut.DIFF_BASE_AGAINST_LEFT,
    ShortcutSection.DIFFS,
    'Diff base against left',
    {key: Key.LEFT, combo: ComboKey.V},
    {key: 'a', combo: ComboKey.V}
  );
  describe(
    Shortcut.DIFF_RIGHT_AGAINST_LATEST,
    ShortcutSection.DIFFS,
    'Diff right against latest',
    {key: Key.RIGHT, combo: ComboKey.V},
    {key: 'd', combo: ComboKey.V}
  );
  describe(
    Shortcut.DIFF_BASE_AGAINST_LATEST,
    ShortcutSection.DIFFS,
    'Diff base against latest',
    {key: 'b', combo: ComboKey.V}
  );

  describe(
    Shortcut.NEXT_LINE,
    ShortcutSection.DIFFS,
    'Go to next line',
    {key: 'j', allowRepeat: true},
    {key: Key.DOWN, allowRepeat: true}
  );
  describe(
    Shortcut.PREV_LINE,
    ShortcutSection.DIFFS,
    'Go to previous line',
    {key: 'k', allowRepeat: true},
    {key: Key.UP, allowRepeat: true}
  );
  describe(
    Shortcut.VISIBLE_LINE,
    ShortcutSection.DIFFS,
    'Move cursor to currently visible code',
    {key: '.'}
  );
  describe(
    Shortcut.NEXT_CHUNK,
    ShortcutSection.DIFFS,
    'Go to next diff chunk',
    {
      key: 'n',
    }
  );
  describe(
    Shortcut.PREV_CHUNK,
    ShortcutSection.DIFFS,
    'Go to previous diff chunk',
    {key: 'p'}
  );
  describe(
    Shortcut.TOGGLE_ALL_DIFF_CONTEXT,
    ShortcutSection.DIFFS,
    'Toggle all diff context',
    {key: 'X'}
  );
  describe(
    Shortcut.NEXT_COMMENT_THREAD,
    ShortcutSection.DIFFS,
    'Go to next comment thread',
    {key: 'N'}
  );
  describe(
    Shortcut.PREV_COMMENT_THREAD,
    ShortcutSection.DIFFS,
    'Go to previous comment thread',
    {key: 'P'}
  );
  describe(
    Shortcut.EXPAND_ALL_COMMENT_THREADS,
    ShortcutSection.DIFFS,
    'Expand all comment threads',
    {key: 'e', docOnly: true}
  );
  describe(
    Shortcut.COLLAPSE_ALL_COMMENT_THREADS,
    ShortcutSection.DIFFS,
    'Collapse all comment threads',
    {key: 'E', docOnly: true}
  );
  describe(
    Shortcut.TOGGLE_HIDE_ALL_COMMENT_THREADS_AND_CODE_POINTERS,
    ShortcutSection.DIFFS,
    'Hide/Display all comment threads and check code pointers',
    {key: 'h'}
  );
  describe(
    Shortcut.TOGGLE_HIDE_CHECK_CODE_POINTERS,
    ShortcutSection.DIFFS,
    'Hide/Display all check code pointers',
    {key: 'H'}
  );
  describe(Shortcut.LEFT_PANE, ShortcutSection.DIFFS, 'Select left pane', {
    key: Key.LEFT,
    modifiers: [Modifier.SHIFT_KEY],
  });
  describe(Shortcut.RIGHT_PANE, ShortcutSection.DIFFS, 'Select right pane', {
    key: Key.RIGHT,
    modifiers: [Modifier.SHIFT_KEY],
  });
  describe(
    Shortcut.TOGGLE_LEFT_PANE,
    ShortcutSection.DIFFS,
    'Hide/show left diff',
    {key: 'A'}
  );
  describe(Shortcut.NEW_COMMENT, ShortcutSection.DIFFS, 'Draft new comment', {
    key: 'c',
  });
  describe(
    Shortcut.SAVE_COMMENT,
    ShortcutSection.DIFFS,
    'Save comment',
    {key: Key.ENTER, modifiers: [Modifier.CTRL_KEY]},
    {key: Key.ENTER, modifiers: [Modifier.META_KEY]},
    {key: 's', modifiers: [Modifier.CTRL_KEY]},
    {key: 's', modifiers: [Modifier.META_KEY]}
  );
  describe(
    Shortcut.OPEN_DIFF_PREFS,
    ShortcutSection.DIFFS,
    'Show diff preferences',
    {key: ','}
  );
  describe(
    Shortcut.TOGGLE_DIFF_REVIEWED,
    ShortcutSection.DIFFS,
    'Mark/unmark file as reviewed',
    {key: 'r'}
  );
  describe(
    Shortcut.TOGGLE_DIFF_MODE,
    ShortcutSection.DIFFS,
    'Toggle unified/side-by-side diff',
    {key: 'm'}
  );
  describe(
    Shortcut.NEXT_UNREVIEWED_FILE,
    ShortcutSection.DIFFS,
    'Mark file as reviewed and go to next unreviewed file',
    {key: 'M'}
  );
  describe(Shortcut.TOGGLE_BLAME, ShortcutSection.DIFFS, 'Toggle blame', {
    key: 'b',
  });
  describe(Shortcut.OPEN_FILE_LIST, ShortcutSection.DIFFS, 'Open file list', {
    key: 'f',
  });
  describe(Shortcut.NEXT_FILE, ShortcutSection.NAVIGATION, 'Go to next file', {
    key: ']',
  });
  describe(
    Shortcut.PREV_FILE,
    ShortcutSection.NAVIGATION,
    'Go to previous file',
    {key: '['}
  );
  describe(
    Shortcut.NEXT_FILE_WITH_COMMENTS,
    ShortcutSection.NAVIGATION,
    'Go to next file that has comments',
    {key: 'J'}
  );
  describe(
    Shortcut.PREV_FILE_WITH_COMMENTS,
    ShortcutSection.NAVIGATION,
    'Go to previous file that has comments',
    {key: 'K'}
  );
  describe(
    Shortcut.OPEN_FIRST_FILE,
    ShortcutSection.NAVIGATION,
    'Go to first file',
    {key: ']'}
  );
  describe(
    Shortcut.OPEN_LAST_FILE,
    ShortcutSection.NAVIGATION,
    'Go to last file',
    {key: '['}
  );
  describe(
    Shortcut.UP_TO_DASHBOARD,
    ShortcutSection.NAVIGATION,
    'Up to dashboard',
    {key: 'u'}
  );
  describe(Shortcut.UP_TO_CHANGE, ShortcutSection.NAVIGATION, 'Up to change', {
    key: 'u',
  });

  describe(
    Shortcut.CURSOR_NEXT_FILE,
    ShortcutSection.FILE_LIST,
    'Select next file',
    {key: 'j', allowRepeat: true},
    {key: Key.DOWN, allowRepeat: true}
  );
  describe(
    Shortcut.CURSOR_PREV_FILE,
    ShortcutSection.FILE_LIST,
    'Select previous file',
    {key: 'k', allowRepeat: true},
    {key: Key.UP, allowRepeat: true}
  );
  describe(
    Shortcut.OPEN_FILE,
    ShortcutSection.FILE_LIST,
    'Go to selected file',
    {key: 'o'},
    {key: Key.ENTER}
  );
  describe(
    Shortcut.TOGGLE_ALL_INLINE_DIFFS,
    ShortcutSection.FILE_LIST,
    'Show/hide all inline diffs',
    {key: 'I'}
  );
  describe(
    Shortcut.TOGGLE_INLINE_DIFF,
    ShortcutSection.FILE_LIST,
    'Show/hide selected inline diff',
    {key: 'i'}
  );
  describe(
    Shortcut.EMOJI_DROPDOWN,
    ShortcutSection.REPLY_DIALOG,
    'Emoji dropdown',
    {key: ':', docOnly: true}
  );
  describe(
    Shortcut.MENTIONS_DROPDOWN,
    ShortcutSection.REPLY_DIALOG,
    'Mentions dropdown',
    {key: '@', docOnly: true}
  );
  return config;
}
