import ComposerCard, {
  type ComposerCardProps,
} from './components/Composer/Card'
import ReceivedCard, {
  type ReceivedCardProps,
} from './components/Received/Card'
import SentCard, { type SentCardProps } from './components/Sent/Card'

/**
 * Link previews (1P / 3P Link Apps) shown in the chat thread. Mirrors
 * the `LockedAttachment` API — render `LinkAttachment.Composer` while
 * drafting, `LinkAttachment.Sent` after posting, and
 * `LinkAttachment.Received` in the recipient's thread. Maps to the
 * "LinkApps" section of the messaging design system.
 *
 * Two visual layouts via the `layout` prop:
 *   - **Featured** (default) — a hero thumbnail filling the card above the
 *     chin, inside a fixed 290x250 box. Used by hero-image LinkApps
 *     (Spotify with cover art, TikTok with a frame, etc.) and by link
 *     previews carrying OG imagery.
 *   - **Classic** — compact card with no hero thumbnail; title /
 *     description / URL / CTA only, sized to its content. Used for LinkApp
 *     embeds without artwork (FAQ, Form) and any link preview that lacks
 *     OG imagery.
 *
 * Pass `accentColor` (a hex extracted from the thumbnail) to paint the card
 * and its bubble tail; the card derives its own WCAG AA text colour.
 *
 * For chat **document / image / video / audio attachments**, reach for
 * `MessageAttachment.{Image,Video,Audio,Pdf,File}` instead — those
 * render as bubbles with built-in viewers (zoom-capable image
 * lightbox, native PDF viewer, video / audio with download) and a
 * caption slot for accompanying text.
 */
const LinkAttachment = {
  Composer: ComposerCard,
  Sent: SentCard,
  Received: ReceivedCard,
}

export default LinkAttachment
export type { ComposerCardProps, SentCardProps, ReceivedCardProps }
export type {
  LinkAttachmentBaseProps,
  LinkAttachmentCta,
  LinkAttachmentLayout,
  LinkAttachmentStatus,
} from './types'
