import { MarkType } from 'prosemirror-model'
import { Command } from '../Editor'
import getMarkType from '../utils/getMarkType'
import getMarkRange from '../utils/getMarkRange'

type RemoveMarkCommand = (typeOrName: string | MarkType) => Command

declare module '../Editor' {
  interface Commands {
    removeMark: RemoveMarkCommand,
  }
}

export const removeMark: RemoveMarkCommand = typeOrName => ({ tr, state }) => {
  const { selection } = tr
  const type = getMarkType(typeOrName, state.schema)
  let { from, to } = selection
  const { $from, empty } = selection

  if (empty) {
    const range = getMarkRange($from, type)

    if (range) {
      from = range.from
      to = range.to
    }
  }

  tr.removeMark(from, to, type)

  return true
}
