import { Button } from '../Button';
import { IconAdd } from '../icons';
import styles from './EmptyState.module.scss';

export interface EmptyStateProps {
  /** Icon or illustration to display */
  icon?: React.ReactNode;
  /** Main heading text */
  title?: string;
  /** Descriptive subtitle text */
  subtitle?: string;
  /** Size variant: 'default' (large with buttons) or 'minimal' (compact, no buttons) */
  size?: 'default' | 'minimal';
  /** Primary action button text */
  primaryActionText?: string;
  /** Primary action click handler */
  onPrimaryAction?: () => void;
  /** Primary action leading icon (defaults to IconAdd) */
  primaryActionLeadingIcon?: React.ReactNode;
  /** Hide default leading icon on primary action */
  hidePrimaryActionLeadingIcon?: boolean;
  /** Additional CSS classes */
  className?: string;
}

export const EmptyState = ({
  icon,
  title,
  subtitle,
  size = 'default',
  primaryActionText,
  onPrimaryAction,
  primaryActionLeadingIcon,
  hidePrimaryActionLeadingIcon = false,
  className = '',
}: EmptyStateProps) => {
  const isMinimal = size === 'minimal';

  const containerClassName = [
    styles.container,
    isMinimal && styles.minimal,
    className,
  ].filter(Boolean).join(' ');

  const leadingIcon = hidePrimaryActionLeadingIcon
    ? undefined
    : primaryActionLeadingIcon ?? <IconAdd size={18} />;

  return (
    <div className={containerClassName}>
      {icon && <div className={styles.icon}>{icon}</div>}

      {(title || subtitle) && (
        <div className={styles.content}>
          {title && <h3 className={styles.title}>{title}</h3>}
          {subtitle && <p className={styles.subtitle}>{subtitle}</p>}
        </div>
      )}

      {!isMinimal && primaryActionText && (
        <div className={styles.actions}>
          <Button
            variant="primary"
            size="regular"
            leadingIcon={leadingIcon}
            onClick={onPrimaryAction}
          >
            {primaryActionText}
          </Button>
        </div>
      )}
    </div>
  );
};
