import Logo from 'shared/components/logos/freesewing.js'
import OsiLogo from 'shared/components/logos/osi.js'
import CreativeCommonsLogo from 'shared/components/logos/cc.js'
import CcByLogo from 'shared/components/logos/cc-by.js'
import { useTranslation } from 'next-i18next'
import Ribbon from 'shared/components/ribbon.js'
import Link from 'next/link'
import { WordMark } from 'shared/components/wordmark.js'

import DiscordIcon from 'shared/components/icons/discord.js'
import FacebookIcon from 'shared/components/icons/facebook.js'
import GithubIcon from 'shared/components/icons/github.js'
import InstagramIcon from 'shared/components/icons/instagram.js'
import RedditIcon from 'shared/components/icons/reddit.js'
import TwitterIcon from 'shared/components/icons/twitter.js'

// Classes
const link = 'text-secondary font-bold hover:pointer hover:underline px-1'
const accent = 'text-accent font-bold text-lg px-1 block sm:inline'
const freesewing = 'px-1 text-lg font-bold block sm:inline'

// Keep these translations in the component because they're only used here
const translations = {
  cc: (
    <span>
      Content on FreeSewing.org is available under{' '}
      <a className={link} href="https://creativecommons.org/licenses/by/4.0/">
        a Creative Commons license
      </a>
    </span>
  ),
  mit: (
    <span>
      The FreeSewing source code is{' '}
      <a href="https://github.com/freesewing/freesewing" className={link}>
        available on Github
      </a>{' '}
      under{' '}
      <a href="https://opensource.org/licenses/MIT" className={link}>
        the MIT license
      </a>
    </span>
  ),
  sponsors: (
    <>
      <span className={freesewing}>FreeSewing</span> is sponsored by these{' '}
      <span className={accent}>awesome companies</span>
    </>
  ),
}

const icon = { className: 'w-8 lg:w-12 h-8 lg:h-12' }
const social = {
  Discord: {
    icon: <DiscordIcon {...icon} />,
    href: 'https://discord.freesewing.org/',
  },
  Instagram: {
    icon: <InstagramIcon {...icon} />,
    href: 'https://instagram.com/freesewing_org',
  },
  Facebook: {
    icon: <FacebookIcon {...icon} />,
    href: 'https://www.facebook.com/groups/627769821272714/',
  },
  Github: {
    icon: <GithubIcon {...icon} />,
    href: 'https://github.com/freesewing',
  },
  Reddit: {
    icon: <RedditIcon {...icon} />,
    href: 'https://www.reddit.com/r/freesewing/',
  },
  Twitter: {
    icon: <TwitterIcon {...icon} />,
    href: 'https://twitter.com/freesewing_org',
  },
}

const Footer = ({ app }) => {
  const { t } = useTranslation(['common', 'patrons'])

  return (
    <footer className="bg-neutral">
      <Ribbon loading={app.loading} theme={app.theme} />
      <div className="grid grid-cols-1 lg:grid-cols-4 py-12 2xl:py-20 text-neutral-content px-4">
        {/* First col - CC & MIT */}
        <div className="mb-20 order-1 mt-20 2xl:mt-0 2xl:mb-0">
          <div className="max-w-md m-auto">
            <div>
              <CreativeCommonsLogo className="w-64 m-auto" />
            </div>
            <div className="flex flex-row gap-2 justify-center items-center mt-8">
              <CcByLogo className="w-8 lg:w-12" />
              <p className="text-neutral-content text-right basis-4/5 lg:basis-3/4 leading-5">
                {translations.cc}
              </p>
            </div>
            <div className="flex flex-row gap-2 justify-center items-center mt-4">
              <OsiLogo className="w-8 lg:w-12" />
              <p className="text-neutral-content text-right basis-4/5 lg:basis-3/4 leading-5">
                {translations.mit}
              </p>
            </div>
          </div>
        </div>

        {/* Second col - Social & Sponsors */}
        <div className="lg:col-span-2 -order-2 2xl:order-2 px-4 lg:px-0">
          {/* Social icons */}
          <div className="w-full sm:w-auto flex flex-row flex-wrap gap-4 lg:gap-8 items-center justify-center">
            {Object.keys(social).map((item) => (
              <Link
                key={item}
                href={social[item].href}
                className="hover:text-secondary hover:-mt-2 transition-all"
                title={item}
              >
                {social[item].icon}
              </Link>
            ))}
          </div>
          {/* Sponsors */}
          <div className="border rounded-xl p-8 border-dashed border-base-100/25 mt-20">
            <p className="text-center text-neutral-content leading-5">
              {translations.sponsors}
              <br />
            </p>
            <div className="py-4 flex flex-row gap-8 flex-wrap 2xl:flex-nowrap justify-around text-neutral-content">
              <a title="Search powered by Algolia" href="https://www.algolia.com/">
                <img
                  src="/brands/algolia.svg"
                  className="h-12 aspect-auto"
                  alt="Search powered by Algolia"
                />
              </a>
              <a title="Error handling by Bugsnag" href="https://www.bugsnag.com/">
                <img src="/brands/bugsnag.svg" className="h-12" alt="Error handling by bugsnag" />
              </a>
              <a title="Translation powered by Crowdin" href="https://www.crowdin.com/">
                <img
                  src="/brands/crowdin.svg"
                  alt="Translation powered by Crowdin"
                  className="h-12"
                />
              </a>
              <a
                title="Builds & hosting by Vercel"
                href="https://www.vercel.com/?utm_source=freesewing&utm_campaign=oss"
              >
                <img src="/brands/vercel.svg" alt="Builds & Hosting by Vercel" className="h-12" />
              </a>
            </div>
          </div>
        </div>

        {/* Col 3 - Logo & Slogan */}
        <div className="w-full 4xl:w-auto xl:max-w-md mb-8 text-center order-3 mt-0 lg:mt-20 2xl:mt-0 2xl:mb-0">
          <div className="max-w-md m-auto">
            <Logo stroke="none" size={164} className="w-40 lg:w-64 m-auto m-auto" />
            <h5 className="lg:text-3xl mt-4">
              <WordMark />
            </h5>
            <p className="bold text-neutral-content text-normal lg:text-xl leading-5">
              {t('sloganCome')}
              <br />
              {t('sloganStay')}
            </p>
          </div>
        </div>
      </div>
    </footer>
  )
}

export default Footer