import { type Parser, createParser } from 'prosemirror-highlight/shiki'
import type { BuiltinLanguage } from 'shiki'

let parser: Parser | undefined

export const shikiParser: Parser = (options) => {
  const lang = options.language ?? 'text'

  // Register the language if it's not yet registered
  const { highlighter, promise } = useHighlighter(lang as BuiltinLanguage)

  // If the highlighter or the language is not available, return a promise that
  // will resolve when it's ready. When the promise resolves, the editor will
  // re-parse the code block.
  if (!highlighter)
    return promise ?? []

  if (!parser)
    parser = createParser(highlighter)

  return parser(options)
}