import { ComponentPropsWithRef, FC } from 'react';
import { cn } from '@/lib/utils';

const Card: FC<ComponentPropsWithRef<'div'>> = ({
  ref,
  className,
  ...props
}) => (
  <div
    ref={ref}
    className={cn(
      'rounded-lg border bg-card text-card-foreground shadow-sm',
      className,
    )}
    {...props}
  />
);
Card.displayName = 'Card';

const CardHeader: FC<ComponentPropsWithRef<'div'>> = ({
  ref,
  className,
  ...props
}) => (
  <div
    ref={ref}
    className={cn('flex flex-col space-y-1.5 p-6', className)}
    {...props}
  />
);
CardHeader.displayName = 'CardHeader';

const CardTitle: FC<ComponentPropsWithRef<'div'>> = ({
  ref,
  className,
  ...props
}) => (
  <div
    ref={ref}
    className={cn(
      'text-2xl font-semibold leading-none tracking-tight',
      className,
    )}
    {...props}
  />
);
CardTitle.displayName = 'CardTitle';

const CardDescription: FC<ComponentPropsWithRef<'div'>> = ({
  ref,
  className,
  ...props
}) => (
  <div
    ref={ref}
    className={cn('text-sm text-muted-foreground', className)}
    {...props}
  />
);
CardDescription.displayName = 'CardDescription';

const CardContent: FC<ComponentPropsWithRef<'div'>> = ({
  ref,
  className,
  ...props
}) => <div ref={ref} className={cn('p-6 pt-0', className)} {...props} />;
CardContent.displayName = 'CardContent';

const CardFooter: FC<ComponentPropsWithRef<'div'>> = ({
  ref,
  className,
  ...props
}) => (
  <div
    ref={ref}
    className={cn('flex items-center p-6 pt-0', className)}
    {...props}
  />
);
CardFooter.displayName = 'CardFooter';

export {
  Card,
  CardContent,
  CardDescription,
  CardFooter,
  CardHeader,
  CardTitle,
};
