import classNames from "classnames";
import React from "react";

/* -------------------------------------------------------------------------- */
/*                                 Components                                 */
/* -------------------------------------------------------------------------- */
import Typography from "./typography/Typography";
import Heading from "./typography/Heading";
import Link from "./Link";

/* -------------------------------------------------------------------------- */
/*                                    Props                                   */
/* -------------------------------------------------------------------------- */
type Props = {
  /**
   * Card component accept children
   */
  children: React.ReactNode;
  /**
   * Styling the card component
   */
  className?: string | undefined;
};

const Card = ({ children, className }: Props) => {
  return (
    <div
      className={classNames([
        className,
        "inline-flex flex-col justify-between p-4 items-start rounded border border-gray-75  gap-y-8 overflow-hidden",
      ])}
    >
      {children}
    </div>
  );
};

// Avatar function
type AvatarProps = {
  children?: React.ReactNode;
};
Card.Avatar = function CardAvatar({ children }: AvatarProps) {
  return <div>{children}</div>;
};

// Title function
Card.Title = function CardTitle({ children, className }: Props) {
  return (
    <Heading className={classNames([className, "select-none  "])}>
      {children}
    </Heading>
  );
};

// SubTitle function
Card.SubTitle = function CardSubTitle({ children, className }: Props) {
  return (
    <Typography className={classNames([className, ""])}>{children}</Typography>
  );
};

// Body function
Card.Body = function CardTitle({ children, className }: Props) {
  return (
    <Typography //
      fontWeightVariant="normal"
      className={classNames([className, "text-sm h-14 overflow-hidden "])}
    >
      {children}
    </Typography>
  );
};

// Cardheader function
Card.CardHeader = function CardCardHeader({ children, className }: Props) {
  return (
    <div className={classNames([className, "flex items-start gap-4"])}>
      {children}
    </div>
  );
};

// Cardcontent function
Card.CardContent = function CardCardContent({ children, className }: Props) {
  return (
    <div className={classNames([className, "flex flex-col gap-y-4 "])}>
      {children}
    </div>
  );
};

// Cardaction function
type CardActionProps = {
  children: React.ReactNode;
  className?: string | undefined;
  href?: string;
};
Card.CardAction = function CardCardAction({
  children,
  className,
  href = "#",
}: CardActionProps) {
  return (
    <Link
      href={href}
      className={classNames([className, "flex items-center gap-2"])}
    >
      {children}
    </Link>
  );
};

// CardMedia function
type CardMediaProps = {
  children?: React.ReactNode;
  className?: string | undefined;
  src?: string;
};
Card.CardMedia = function CardCardMedia({
  className,
  src = "#",
}: CardMediaProps) {
  return (
    <img src={src} className={classNames([className, "w-full h-32 rounded"])} />
  );
};

export default Card;