// @flow
import React, { useState } from 'react';
import styled from 'styled-components';

import { imagesAssetsBaseUrl } from '../../../Theme/Vars';
import RotatingChevron from '../RotatingChevron/RotatingChevron';
import ApoliticalBrand from '../../../Theme/ApoliticalBrand';

type Props = {|
   urls: {
    english: string,
    francais: string,
    espanol: string,
  },
  className?: string,
|}

const LanguageSwitcherWrapper = styled.div`
  width: 100%;
  display: flex;

  @media ${ApoliticalBrand.breakpoint.onlyScreen.mobileXL} {
    display: none;
  }
`;

const LanguageSwitcherSubWrapper = styled.div`
  display: flex;
  flex-direction: column;
  width: 100%;
`;

const LanguageSwitcherTrigger = styled.div`
  display: flex;
  align-items: center;
  justify-content: space-between;
  line-height: 60px;
  padding: 0 22px;
  height: 40px;
  cursor: pointer;
  background: url("${imagesAssetsBaseUrl}/signup/languages/translate-teal.png")
    10px no-repeat;
  background-size: 20px;
  background-color: ${ApoliticalBrand.color.gray};
`;

const LanguageSwitcherOptions = styled.div`
  display: block;
  top: 100%;
  left: 0;
  right: 0;
  border-top: 0;
  background: ${ApoliticalBrand.color.white};
  transition: all 0.5s;
  border-radius: 3px;
  box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.1);
  margin-top: 5px;
`;

const LanguageSelected = styled.span`
  padding-left: 20px;
  text-transform: uppercase;
  color: ${ApoliticalBrand.color.charcoal};
  letter-spacing: 1.57px;
  font-size: 1.3rem;
  font-weight: 500;
`;

const LanguageOption = styled.a`
  display: block;
  text-align: left;
  padding: 16px 0px 16px 42px;
  cursor: pointer;
  transition: all 0.5s;
  letter-spacing: 1.57px;
  font-size: 1.3rem;
  font-weight: 500;
  text-transform: uppercase;
  text-decoration: none;
  color: ${ApoliticalBrand.color.charcoal};

  svg {
    padding-right: 15px;
  }
`;

const MobileLanguageSwitcher = ({
  urls,
  className,
}: Props) => {
  const [openOptions, setOpenOptions] = useState(false);

  const selectedLang = window.location.search.split('=')[1] || 'en';

  let otherLangs;

  switch (selectedLang) {
    case 'es':
      otherLangs = ['english', 'francais'];
      break;
    case 'fr':
      otherLangs = ['english', 'espanol'];
      break;
    default:
      otherLangs = ['francais', 'espanol'];
  }

  const languageText = (lang) => {
    if (lang === 'espanol' || lang === 'es') {
      return 'Español';
    } if (lang === 'francais' || lang === 'fr') {
      return 'Français';
    }
    return 'English';
  };


  const handleLanguageSwitch = (e) => {
    e.stopPropagation();
    e.cancelBubble = true;
    setOpenOptions(false);
  };

  return (
    <LanguageSwitcherWrapper
      onClick={() => setOpenOptions(!openOptions)}
      className={className}
      tabIndex={0}
    >
      <LanguageSwitcherSubWrapper>
        <LanguageSwitcherTrigger>
          <LanguageSelected>
            {languageText(selectedLang)}
          </LanguageSelected>
          <RotatingChevron openOptions={openOptions} />
        </LanguageSwitcherTrigger>
        {openOptions && (
          <LanguageSwitcherOptions>
            {otherLangs.map((lang) => (
              <LanguageOption
                selected={false}
                href={urls[lang]}
                key={lang}
                onClick={(e) => handleLanguageSwitch(e)}
              >
                {languageText(lang)}
              </LanguageOption>
            ))}
          </LanguageSwitcherOptions>
        )}
      </LanguageSwitcherSubWrapper>
    </LanguageSwitcherWrapper>
  );
};

MobileLanguageSwitcher.defaultProps = {
  className: '',
};

export default MobileLanguageSwitcher;
