import { Icon, Button, PopupTrigger, Popup, Tooltip, Text } from 'react-basics';
import { useIntl } from 'react-intl';
import classNames from 'classnames';
import { languages } from 'lib/lang';
import useLocale from 'hooks/useLocale';
import Icons from 'components/icons';
import { labels } from 'components/messages';
import styles from './LanguageButton.module.css';

export default function LanguageButton({ tooltipPosition = 'top', menuPosition = 'right' }) {
  const { formatMessage } = useIntl();
  const { locale, saveLocale } = useLocale();
  const items = Object.keys(languages).map(key => ({ ...languages[key], value: key }));

  function handleSelect(value) {
    saveLocale(value);
  }

  return (
    <PopupTrigger>
      <Tooltip label={formatMessage(labels.language)} position={tooltipPosition}>
        <Button variant="quiet">
          <Icon>
            <Icons.Globe />
          </Icon>
        </Button>
      </Tooltip>
      <Popup position={menuPosition} alignment="end">
        <div className={styles.menu}>
          {items.map(({ value, label }) => {
            return (
              <div
                key={value}
                className={classNames(styles.item, { [styles.selected]: value === locale })}
                onClick={handleSelect.bind(null, value)}
              >
                <Text>{label}</Text>
                {value === locale && (
                  <Icon className={styles.icon}>
                    <Icons.Check />
                  </Icon>
                )}
              </div>
            );
          })}
        </div>
      </Popup>
    </PopupTrigger>
  );
}