import React from 'react'
import PropTypes from 'prop-types'
import { defineMessages, injectIntl } from 'react-intl'
import ModalLayout from './modal_layout'
import Text from '../text'
import Heading from '../heading'

class HotkeysModal extends React.PureComponent {

  render() {
    const { intl, onClose } = this.props

    return (
      <ModalLayout
        title={intl.formatMessage(messages.heading)}
        onClose={onClose}
      >
        <div className={[_s.d, _s.flexRow].join(' ')}>
          <table>
            <thead>
              <tr>
                <th>
                  <Heading size='h4'>
                    {intl.formatMessage(messages.hotkey)}
                  </Heading>
                </th>
              </tr>
            </thead>
            <tbody>
              <HotKeysModalRow hotkey='r' action={intl.formatMessage(messages.reply)} />
              <HotKeysModalRow hotkey='m' action={intl.formatMessage(messages.mention)} />
              <HotKeysModalRow hotkey='p' action={intl.formatMessage(messages.profile)} />
              <HotKeysModalRow hotkey='f' action={intl.formatMessage(messages.favorite)} />
              <HotKeysModalRow hotkey='b' action={intl.formatMessage(messages.boost)} />
              <HotKeysModalRow hotkey='enter, o' action={intl.formatMessage(messages.enter)} />
              <HotKeysModalRow hotkey='x' action={intl.formatMessage(messages.toggle_hidden)} />
              <HotKeysModalRow hotkey='h' action={intl.formatMessage(messages.toggle_sensitivity)} />
              <HotKeysModalRow hotkey='up, k' action={intl.formatMessage(messages.up)} />
            </tbody>
          </table>
          <table>
            <thead>
              <tr>
                <th>
                  <Heading size='h4'>
                    {intl.formatMessage(messages.hotkey)}
                  </Heading>
                </th>
              </tr>
            </thead>
            <tbody>
              <HotKeysModalRow hotkey='down, j' action={intl.formatMessage(messages.down)} />
              <HotKeysModalRow hotkey='1 - 9' action={intl.formatMessage(messages.column)} />
              <HotKeysModalRow hotkey='n' action={intl.formatMessage(messages.compose)} />
              <HotKeysModalRow hotkey='alt + n' action={intl.formatMessage(messages.gab)} />
              <HotKeysModalRow hotkey='backspace' action={intl.formatMessage(messages.back)} />
              <HotKeysModalRow hotkey='s' action={intl.formatMessage(messages.search)} />
              <HotKeysModalRow hotkey='esc' action={intl.formatMessage(messages.unfocus)} />
              <HotKeysModalRow hotkey='g + h' action={intl.formatMessage(messages.home)} />
              <HotKeysModalRow hotkey='g + n' action={intl.formatMessage(messages.notifications)} />
            </tbody>
          </table>
          <table>
            <thead>
              <tr>
                <th>
                  <Heading size='h4'>
                    {intl.formatMessage(messages.hotkey)}
                  </Heading>
                </th>
              </tr>
            </thead>
            <tbody>
              <HotKeysModalRow hotkey='g + s' action={intl.formatMessage(messages.start)} />
              <HotKeysModalRow hotkey='g + f' action={intl.formatMessage(messages.favorites)} />
              <HotKeysModalRow hotkey='g + p' action={intl.formatMessage(messages.pinned)} />
              <HotKeysModalRow hotkey='g + u' action={intl.formatMessage(messages.my_profile)} />
              <HotKeysModalRow hotkey='g + b' action={intl.formatMessage(messages.blocked)} />
              <HotKeysModalRow hotkey='g + m' action={intl.formatMessage(messages.muted)} />
              <HotKeysModalRow hotkey='g + r' action={intl.formatMessage(messages.requests)} />
              <HotKeysModalRow hotkey='?' action={intl.formatMessage(messages.legend)} />
            </tbody>
          </table>
        </div>
      </ModalLayout>
    )
  }

}

const HotKeysModalRow = ({ hotkey, action }) => (
  <tr>
    <td>
      <kbd>
        <Text size='small'>
          {hotkey}
        </Text>
      </kbd>
    </td>
    <td>
      <Text size='small'>
        {action}
      </Text>
    </td>
  </tr>
)

HotKeysModalRow.propTypes = {
  hotkey: PropTypes.string.isRequired,
  action: PropTypes.string.isRequired,
}

const messages = defineMessages({
  heading: { id: 'keyboard_shortcuts.heading', defaultMessage: 'Keyboard Shortcuts' },
  close: { id: 'lightbox.close', defaultMessage: 'Close' },
  hotkey: { id: 'keyboard_shortcuts.hotkey', defaultMessage: 'Hotkey' },
  reply: { id: 'keyboard_shortcuts.reply', defaultMessage: 'reply' },
  mention: { id: 'keyboard_shortcuts.mention', defaultMessage: 'mention author' },
  profile: { id: 'keyboard_shortcuts.profile', defaultMessage: 'open author\'s profile' },
  favorite: { id: 'keyboard_shortcuts.favorite', defaultMessage: 'favorite' },
  boost: { id: 'keyboard_shortcuts.boost', defaultMessage: 'repost' },
  enter: { id: 'keyboard_shortcuts.enter', defaultMessage: 'open status' },
  toggle_hidden: { id: 'keyboard_shortcuts.toggle_hidden', defaultMessage: 'show/hide text behind CW' },
  toggle_sensitivity: { id: 'keyboard_shortcuts.toggle_sensitivity', defaultMessage: 'show/hide media' },
  up: { id: 'keyboard_shortcuts.up', defaultMessage: 'move up in the list' },
  down: { id: 'keyboard_shortcuts.down', defaultMessage: 'move down in the list' },
  column: { id: 'keyboard_shortcuts.column', defaultMessage: 'focus a status in one of the columns' },
  compose: { id: 'keyboard_shortcuts.compose', defaultMessage: 'focus the compose textarea' },
  gab: { id: 'keyboard_shortcuts.toot', defaultMessage: 'start a brand new gab' },
  back: { id: 'keyboard_shortcuts.back', defaultMessage: 'navigate back' },
  search: { id: 'keyboard_shortcuts.search', defaultMessage: 'focus search' },
  unfocus: { id: 'keyboard_shortcuts.unfocus', defaultMessage: 'un-focus compose textarea/search' },
  home: { id: 'keyboard_shortcuts.home', defaultMessage: 'open home timeline' },
  notifications: { id: 'keyboard_shortcuts.notifications', defaultMessage: 'open notifications column' },
  start: { id: 'keyboard_shortcuts.start', defaultMessage: 'open "get started" column' },
  favorites: { id: 'keyboard_shortcuts.favorites', defaultMessage: 'open favorites list' },
  pinned: { id: 'keyboard_shortcuts.pinned', defaultMessage: 'open pinned gabs list' },
  my_profile: { id: 'keyboard_shortcuts.my_profile', defaultMessage: 'open your profile' },
  blocked: { id: 'keyboard_shortcuts.blocked', defaultMessage: 'open blocked users list' },
  muted: { id: 'keyboard_shortcuts.muted', defaultMessage: 'open muted users list' },
  requests: { id: 'keyboard_shortcuts.requests', defaultMessage: 'open follow requests list' },
  legend: { id: 'keyboard_shortcuts.legend', defaultMessage: 'display this legend' },
})

HotkeysModal.propTypes = {
  intl: PropTypes.object.isRequired,
  onClose: PropTypes.func.isRequired,
}

export default injectIntl(HotkeysModal)