import type { EditorExtensionConfig } from '@platform-modules/ui-editor'
import type { ReactNode } from 'react'

export interface EditorWidgetMediaItem {
  src: string
  alt: string
  width?: number
  height?: number
}

export interface EditorWidgetMediaRenderProps {
  disabled: boolean
  onSelect(item: EditorWidgetMediaItem): boolean
}

export interface EditorWidgetMediaAdapter {
  extensions: EditorExtensionConfig
  renderPicker(props: EditorWidgetMediaRenderProps): ReactNode
}

export type EditorWidgetErrorCode = 'invalid_media' | 'media_insert_failed'

export interface EditorWidgetError extends Error {
  readonly name: 'EditorWidgetError'
  readonly code: EditorWidgetErrorCode
}

export interface EditorWidgetProps {
  value: string
  onChange(nextHtml: string): void
  dir?: 'ltr' | 'rtl'
  readOnly?: boolean
  ariaLabel: string
  ariaDescribedBy?: string
  media?: EditorWidgetMediaAdapter
  onError?(error: EditorWidgetError): void
  className?: string
}
