'use client'

import SanityImage from 'components/ui/sanity-image'
import { cn } from 'lib/utils'
import Link from 'next/link'
import { FC } from 'react'

interface CardProps {
  className?: string
  title: string
  image: object | any
  link: object | any
  text?: string
  imageFormat?: 'square' | 'portrait' | 'landscape'
}

const placeholderImg = '/product-img-placeholder.svg'

const Card: FC<CardProps> = ({
  className,
  title,
  image,
  link,
  text,
  imageFormat = 'square',
}) => {
  const rootClassName = cn('relative', className)

  const { linkType } = link

  const imageWrapperClasses = cn('w-full h-full overflow-hidden relative', {
    ['aspect-square']: imageFormat === 'square',
    ['aspect-[3/4]']: imageFormat === 'portrait',
    ['aspect-[4/3]']: imageFormat === 'landscape',
  })
  const imageClasses = cn('object-cover w-full h-full')

  function Card() {
    if (linkType === 'internal') {
      return (
        <Link
          href={link.internalLink.reference.slug.current}
          className={rootClassName}
          aria-label={title}
        >
          <div className="flex flex-col">
            {image && (
              <div className={imageWrapperClasses}>
                <SanityImage
                  className={imageClasses}
                  image={image}
                  alt={image.alt || ''}
                  sizes="(max-width: 1024px) 50vw, 20vw"
                />
              </div>
            )}
            <h3 className="mt-2 text-high-contrast font-medium text-sm underline underline-offset-2 lg:text-lg lg:mt-3 lg:underline-offset-4 2xl:text-xl">
              {title}
            </h3>
            {text && (
              <p className="text-sm mt-1 text-low-contrast lg:text-base lg:mt-2">
                {text}
              </p>
            )}
          </div>
        </Link>
      )
    }

    return (
      <a
        href={link.externalLink.url}
        className={rootClassName}
        aria-label={title}
      >
        <div className="flex flex-col">
          {image && (
            <div className={imageWrapperClasses}>
              <SanityImage
                className={imageClasses}
                image={image}
                alt={image.alt || ''}
                sizes="(max-width: 1024px) 50vw, 20vw"
              />
            </div>
          )}
          <h3 className="mt-2 text-high-contrast font-medium text-sm underline underline-offset-2 lg:text-lg lg:mt-3 lg:underline-offset-4 2xl:text-xl">
            {title}
          </h3>
          {text && (
            <p className="text-sm mt-1 text-low-contrast lg:text-base lg:mt-2">
              {text}
            </p>
          )}
        </div>
      </a>
    )
  }

  return <Card />
}

export default Card