import { Typography } from '../../Typography'
import { Rate } from '../types'

import styles from '../rate-card.module.css'
import { Button } from '../../Button'
import InfoCircleIcon from '../../Icons/InfoCircle'
import { variants } from '../variants'

interface CampaignRateCardProps {
  name: string
  value: string
  isSelected: boolean
  rateTitle: string
  paymentTerm: string
  bannerText: string
  rate: Rate
  memberRate?: Rate
  referenceRate: Rate
  comparisonRate?: Omit<Rate, 'label'>
  isHighlightedRate?: boolean
  approximateRate: Rate
  handleChange: () => void
  handleTermsClick?: () => void
}

export default function CampaignRateCard({
  name,
  value,
  isSelected,
  rateTitle,
  paymentTerm,
  rate,
  memberRate,
  approximateRate,
  comparisonRate,
  referenceRate,
  bannerText,
  isHighlightedRate,
  handleChange,
  handleTermsClick,
}: CampaignRateCardProps) {
  const classNames = variants({
    variant: 'Campaign',
  })

  return (
    <label>
      <input
        className={styles.radio}
        type="radio"
        name={name}
        value={value}
        checked={isSelected}
        onChange={handleChange}
      />
      <div className={classNames}>
        <Typography variant="Tag/sm">
          <p className={styles.banner}>{bannerText}</p>
        </Typography>
        <div className={styles.container}>
          <header>
            <Typography variant="Tag/sm">
              <h3 className={styles.title}>
                <Button
                  variant="Icon"
                  color="IconDefault"
                  size="Small"
                  onPress={handleTermsClick}
                >
                  <InfoCircleIcon height={20} width={20} />
                </Button>
                {rateTitle}
                <span className={styles.textSecondary}>
                  {` / ${paymentTerm}`}
                </span>
              </h3>
            </Typography>
          </header>
          <div className={styles.content}>
            <div
              className={`${styles.rateRow} ${isHighlightedRate ? styles.highlightedRate : ''}`}
            >
              <Typography variant="Body/Supporting text (caption)/smBold">
                <p>{rate.label}</p>
              </Typography>
              <Typography variant="Title/Subtitle/md">
                <p>
                  {rate.price}{' '}
                  <Typography variant="Body/Supporting text (caption)/smBold">
                    <span>{rate.unit}</span>
                  </Typography>
                </p>
              </Typography>
            </div>
            {memberRate ? (
              <div className={`${styles.rateRow} ${styles.highlightedRate}`}>
                <Typography variant="Body/Supporting text (caption)/smBold">
                  <p>{memberRate.label}</p>
                </Typography>
                <Typography variant="Title/Subtitle/md">
                  <p>
                    {memberRate.price}{' '}
                    <Typography variant="Body/Supporting text (caption)/smBold">
                      <span>{memberRate.unit}</span>
                    </Typography>
                  </p>
                </Typography>
              </div>
            ) : null}
            {comparisonRate ? (
              <div className={`${styles.rateRow} ${styles.comparisonRate}`}>
                <Typography variant="Title/Subtitle/md">
                  <p>
                    <span className={styles.strikethrough}>{rate.price}</span>{' '}
                    <Typography variant="Body/Supporting text (caption)/smBold">
                      <span className={styles.strikethrough}>
                        {comparisonRate.unit}
                      </span>
                    </Typography>
                  </p>
                </Typography>
              </div>
            ) : null}
            <div className={`${styles.rateRow} ${styles.approximateRate}`}>
              <Typography variant="Body/Supporting text (caption)/smRegular">
                <p>{approximateRate.label}</p>
              </Typography>
              <Typography variant="Body/Supporting text (caption)/smRegular">
                <p>
                  {approximateRate.price} {approximateRate.unit}
                </p>
              </Typography>
            </div>
          </div>
          {referenceRate ? (
            <footer className={styles.footer}>
              <Typography variant="Tag/sm">
                <p>{referenceRate.label}</p>
              </Typography>
              <Typography variant="Tag/sm">
                <p>
                  {referenceRate.price} {referenceRate.unit}
                </p>
              </Typography>
            </footer>
          ) : null}
        </div>
      </div>
    </label>
  )
}
