import type { ComponentType, SVGProps } from "react";
import { cn } from "@/lib/utils";

type IconComponent = ComponentType<SVGProps<SVGSVGElement>>;

// Empty state generique pour les listes / tables du portail et de l'admin.
// Utilise quand aucune donnee n'est encore disponible (premier login,
// onboarding en cours, etc.).
export function EmptyState({
  icon: Icon,
  title,
  description,
  action,
  className,
  compact = false,
}: {
  icon?: IconComponent;
  title: string;
  description?: string;
  action?: React.ReactNode;
  className?: string;
  compact?: boolean;
}) {
  return (
    <div
      className={cn(
        "flex flex-col items-center justify-center text-center",
        compact ? "px-6 py-10" : "px-6 py-16",
        className
      )}
    >
      {Icon ? (
        <div className="mb-4 inline-flex size-11 items-center justify-center rounded-xl border border-border bg-stone-900/[0.03]">
          <Icon aria-hidden className="size-5 text-text-dim" />
        </div>
      ) : null}
      <h3 className="text-sm font-semibold text-text">{title}</h3>
      {description ? (
        <p className="mt-1.5 max-w-sm text-xs text-text-dim">{description}</p>
      ) : null}
      {action ? <div className="mt-5">{action}</div> : null}
    </div>
  );
}
