import React, { ReactNode } from "react";

import { Button } from "./Button";
import { EventSetting } from "./EventSetting";
import { Image } from "./Image";
import { Link } from "./Link";

import styles from "./EventCard.module.css";

interface BaseProps {
  name: string;
  short: string;
  date: Date;
  online: boolean;
  location: string;
  poster?: string;
  registerLink?: string;
  children: ReactNode;
}

type EventCardProps =
  | (BaseProps & { showDescription?: false; link: string })
  | (BaseProps & { showDescription: true; link?: string });

export function EventCard({
  link,
  name,
  date,
  online,
  location,
  poster,
  registerLink,
  children,
  showDescription = false,
}: EventCardProps) {
  return (
    <article className={styles.card}>
      {poster && (
        <aside>
          <Image alt={name} src={poster} />
          {registerLink && (
            <Button
              isLink={true}
              href={registerLink}
              size="small"
              className={`${styles.registerButton} ${styles.registerButtonWithPoster}`}
            >
              Register
            </Button>
          )}
        </aside>
      )}
      <section
        className={[
          styles.content,
          showDescription ? styles.mobileShowDescriptionContent : "",
        ].join(" ")}
      >
        <h1>{name}</h1>
        <h2>
          <EventSetting date={date} online={online} location={location} />
        </h2>
        {!showDescription && link && (
          <Link href={link}>
            <span className={styles.mobileLearnMore}>Learn more</span>
          </Link>
        )}
        <div className={styles.children}>{children}</div>
        {!poster && registerLink && (
          <Button
            isLink={true}
            href={registerLink}
            size="small"
            className={styles.registerButton}
          >
            Register
          </Button>
        )}
      </section>
    </article>
  );
}
