/**
 * Login container.
 * @module components/theme/Login/Login
 *
 * utilizzata nella pagina /login e nelle pagine Unauthorized
 *
 */

import React from 'react';
import { Button } from 'design-react-kit';
import { defineMessages, useIntl } from 'react-intl';
import { UniversalLink } from '@plone/volto/components';
import {
  Icon,
  LoginButton,
} from 'design-comuni-plone-theme/components/ItaliaTheme';
import { Icon as BaseIcon } from '@plone/volto/components';
import { useLocation } from 'react-router-dom';
import config from '@plone/volto/registry';
import { getSiteProperty } from 'design-comuni-plone-theme/helpers';
import cieSVG from 'design-comuni-plone-theme/icons/entra_con_cie.svg';

const messages = defineMessages({
  loginSpid: {
    id: 'login_spid',
    defaultMessage: 'SPID',
  },
  loginSpidHelp: {
    id: 'login_spid_help',
    defaultMessage: 'How to activate SPID',
  },
  loginCie: {
    id: 'login_cie',
    defaultMessage: 'CIE',
  },
  loginCieHelp: {
    id: 'login_cie_help',
    defaultMessage: 'How to activate CIE',
  },
});

// https://v5.reactrouter.com/web/example/query-parameters
function useQueryV5() {
  const { search } = useLocation();
  return React.useMemo(() => new URLSearchParams(search), [search]);
}

const LoginAuthButton = ({ spidLoginUrl, qs, intl }) => (
  <div className="login-method">
    <h2>{getSiteProperty('loginAuthPage', intl.locale)}</h2>
    <p className="description">
      {getSiteProperty('loginAuthDescription', intl.locale)}
    </p>
    <div className="authorized-spid-login mb-4">
      <Button
        className="btn-icon"
        color="primary"
        href={`${spidLoginUrl}${qs}`}
        tag="a"
        data-element="personal-area-login"
        size="big"
      >
        <span className="rounded-icon">
          <Icon color="primary" icon="it-user" padding={false} size="" />
        </span>
        <span>{getSiteProperty('loginAuthButtonText', intl.locale)}</span>
      </Button>

      {config.settings.siteProperties.loginShowSpidActivationInfo && (
        <div>
          <UniversalLink href="https://www.spid.gov.it/cos-e-spid/come-attivare-spid">
            <small>{intl.formatMessage(messages.loginSpidHelp)}</small>
          </UniversalLink>
        </div>
      )}
    </div>
  </div>
);

const CieButton = ({ cieLoginUrl, qs, intl }) => (
  <div className="login-method">
    <h2>{intl.formatMessage(messages.loginCie)}</h2>
    <p className="description">
      {getSiteProperty('loginAuthDescription', intl.locale)}
    </p>
    <div className="authorized-spid-login mb-4">
      <Button
        className="btn-icon"
        color="primary"
        href={`${cieLoginUrl}${qs}`}
        tag="a"
        data-element="personal-area-login"
        size="big"
        style={{
          padding: 0,
        }}
        title={getSiteProperty('loginAuthButtonText', intl.locale)}
      >
        <BaseIcon name={cieSVG} style={{ width: '100%', height: '100%' }} />
      </Button>
      <div>
        <UniversalLink href="https://www.cartaidentita.interno.gov.it/">
          <small>{intl.formatMessage(messages.loginCieHelp)}</small>
        </UniversalLink>
      </div>
    </div>
  </div>
);

const ArButton = ({ arLoginUrl, intl }) => (
  <div className="login-method">
    <h2>{intl.formatMessage(messages.loginSpid)}</h2>
    <p className="description">
      {getSiteProperty('loginAuthDescription', intl.locale)}
    </p>
    <div className="authorized-spid-login mb-4">
      <LoginButton baseLoginUrl={arLoginUrl}>
        <span className="rounded-icon">
          <Icon color="primary" icon="it-user" padding={false} size="" />
        </span>
        <span className="d-none d-lg-block">
          {getSiteProperty('loginAuthButtonText', intl.locale)}
        </span>
      </LoginButton>
    </div>
  </div>
);

const LoginAgidButtons = ({ origin }) => {
  const intl = useIntl();
  const query = useQueryV5();
  const came_from = query.get('came_from') || origin;
  const qs = came_from ? `?came_from=${came_from}` : '';
  // "ar" => "Area Riservata"
  const arLoginUrl = config.settings.siteProperties?.arLoginUrl;
  const spidLoginUrl = __CLIENT__
    ? window.env.RAZZLE_SPID_LOGIN_URL
    : process.env.RAZZLE_SPID_LOGIN_URL;
  const cieLoginUrl = __CLIENT__
    ? window.env.RAZZLE_CIE_LOGIN_URL
    : process.env.RAZZLE_CIE_LOGIN_URL;

  return (
    <>
      {spidLoginUrl && (
        <LoginAuthButton intl={intl} qs={qs} spidLoginUrl={spidLoginUrl} />
      )}
      {cieLoginUrl && (
        <CieButton intl={intl} qs={qs} cieLoginUrl={cieLoginUrl} />
      )}
      {!cieLoginUrl && !spidLoginUrl && arLoginUrl && (
        <ArButton intl={intl} qs={qs} arLoginUrl={arLoginUrl} />
      )}
    </>
  );
};

export default LoginAgidButtons;
