// @ts-nocheck
/**
 * Copyright (c) Nicolas Gallagher.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow
 */

import { propsToAriaRole } from './propsToAriaRole'

const roleComponents = {
  article: 'article',
  banner: 'header',
  blockquote: 'blockquote',
  code: 'code',
  complementary: 'aside',
  contentinfo: 'footer',
  deletion: 'del',
  emphasis: 'em',
  figure: 'figure',
  insertion: 'ins',
  form: 'form',
  list: 'ul',
  listitem: 'li',
  main: 'main',
  navigation: 'nav',
  region: 'section',
  strong: 'strong',
}

const emptyObject = {}

export const propsToAccessibilityComponent = (
  props: object = emptyObject
): void | string => {
  // special-case for "label" role which doesn't map to an ARIA role
  if (props.accessibilityRole === 'label') {
    return 'label'
  }

  const role = propsToAriaRole(props)
  if (role) {
    if (role === 'heading') {
      const level = props.accessibilityLevel || props['aria-level']
      if (level != null) {
        return `h${level}`
      }
      return 'h1'
    }
    return roleComponents[role]
  }
}
