import { ViewPlugin } from '@codemirror/view'
import { pickedCompletion } from '@codemirror/autocomplete'
import { emitCompletionEvent } from './toolbar/utils/analytics'

/**
 * A custom view plugin that watches for transactions with the `pickedCompletion` annotation.
 * If the completion label starts with a command, log that command for analytics.
 */
export const completionLogger = ViewPlugin.define(view => {
  return {
    update(update) {
      for (const tr of update.transactions) {
        const completion = tr.annotation(pickedCompletion)
        if (completion) {
          const command = completionCommand(completion.label)
          if (command) {
            emitCompletionEvent(view, command)
          }
        }
      }
    },
  }
})

const completionCommand = (label: string): string | null => {
  const matches = label.match(/^\\(\w+)/)
  return matches ? matches[1] : null
}
