/* eslint-disable @next/next/no-img-element */
import Head from 'next/head';
import { GetServerSideProps } from 'next/types';
// @Antd
import { Col, Row } from 'antd';
// @i18n
import { Trans, useTranslation } from 'next-i18next';
import { Translations } from '../../public/locales';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
// @Layout
import { LayoutWrapper } from '../../src/components/layouts/wrapper';
// @Styled
import styles from '../../src/components/pages/terms/index.module.less';
import Link from 'next/link';

export const getServerSideProps: GetServerSideProps = async ({ locale }) => {
  return {
    props: {
      ...(await serverSideTranslations(locale as string, ['common', 'about'])),
    },
  };
};

type i18nLang = 'es' | 'en';

type ItemsOfConditionsProps = {
  content: string;
};

type TermsOfConditionsProps = {
  numberOfTerm: string;
  title: string;
  content: string;
  listOfItems?: ItemsOfConditionsProps[];
};

type TermsOfServiceProps = {
  typeOfTerm: 'content' | 'ul';
  content: string;
  conditions?: TermsOfConditionsProps[];
};

export default function TermsAndService() {
  const { t, i18n } = useTranslation();
  const { termsOfService } = Translations[(i18n.language as i18nLang) ?? 'es'];

  const TermsOfServiceComponent = (props: TermsOfServiceProps) => {
    if (props.typeOfTerm === 'content') {
      return <p>{props.content}</p>;
    }

    return (
      <>
        {(props.conditions ?? []).map((prop, key: number) => {
          return (
            <div
              className={styles['terms-page__conditions--spacing']}
              key={key.toString()}
            >
              <span className={styles['terms-page__numberOfItem']}>
                {prop.numberOfTerm}
              </span>
              <span className={styles['terms-page__titleOfItem']}>
                {prop.title}
              </span>
              <Trans
                t={t}
                i18nKey={prop.content}
                components={{
                  strong: <strong />,
                  email: (
                    <a
                      className={styles['terms-page__anchorOfItem']}
                      href='mailto:goldenhispanicfoundation@.com'
                    />
                  ),
                }}
              />
              {prop.listOfItems ? (
                <ul className={styles['terms-page__ul']}>
                  {prop.listOfItems.map((item, key: number) => {
                    return <li key={key.toString()}>{item.content}</li>;
                  })}
                </ul>
              ) : null}
            </div>
          );
        })}
      </>
    );
  };

  return (
    <main className={'container '.concat(styles.wrapper__page)}>
      <Head>
        <title>{termsOfService?.title} | GHF</title>
        <meta
          name='description'
          content={termsOfService?.description}
          key='desc'
        />
      </Head>
      <section className={styles.wrapper__page}>
        <Row className='wrapper__content'>
          <Col
            className={'wrapper__content--horizontal '.concat(
              styles['terms-page__flex'],
            )}
          >
            <div>
              <h1 className={styles['terms-page__title']}>
                {termsOfService?.title}
              </h1>
              <h3 className={styles['terms-page__description']}>
                {termsOfService?.description}
              </h3>
            </div>
            {(termsOfService?.terms ?? []).map(
              (term: TermsOfServiceProps, key: number) => {
                return (
                  <div
                    className={styles['terms-page__conditions']}
                    key={key.toString()}
                  >
                    {TermsOfServiceComponent(term)}
                  </div>
                );
              },
            )}
          </Col>
        </Row>
      </section>
    </main>
  );
}

TermsAndService.getLayout = function getLayout(page: React.ReactElement) {
  return <LayoutWrapper>{page}</LayoutWrapper>;
};
