import type Editor from 'tinymce/core/api/Editor';

export interface DomModifier {
  readonly setAttrib: (attr: string, value: string) => void;
  readonly setStyle: (prop: string, value: string) => void;
  readonly setFormat: (formatName: string, value: string) => void;
}

// The get node is required here because it can be transformed
// when switching between tags (e.g. th and td)
const normal = (editor: Editor, element: Element): DomModifier => {
  const dom = editor.dom;

  const setAttrib = (attr: string, value: string) => {
    dom.setAttrib(element, attr, value);
  };

  const setStyle = (prop: string, value: string) => {
    dom.setStyle(element, prop, value);
  };

  const setFormat = (formatName: string, value: string) => {
    // Remove format if given an empty string
    if (value === '') {
      editor.formatter.remove(formatName, { value: null }, element, true);
    } else {
      editor.formatter.apply(formatName, { value }, element);
    }
  };

  return {
    setAttrib,
    setStyle,
    setFormat
  };
};

export const DomModifier = {
  normal
};
