// Core
import { EditorState, Modifier } from '../../core';

// Custom Utilities
import initialInlineStyles from '../inline/inlineStyles';

// Custom Types
import type { State, StateHandler } from '../../types';

const clearInlineStyles = (
  state: State,
  stateHandler: StateHandler,
  customInlineStyles?: string[]
) => {
  const contentState = state.getCurrentContent();
  const selection = state.getSelection();
  const stylesToRemove = Object.keys(initialInlineStyles);

  if (customInlineStyles) {
    customInlineStyles.forEach((style) => {
      if (!stylesToRemove.includes(style)) stylesToRemove.push(style);
    });
  }

  const contentWithoutStyles = stylesToRemove.reduce(
    (updatedContentState, styleKey) =>
      Modifier.removeInlineStyle(updatedContentState, selection, styleKey),
    contentState
  );

  const newState = EditorState.push(
    state,
    contentWithoutStyles,
    'change-inline-style'
  );

  stateHandler(newState);
  return newState;
};

export default clearInlineStyles;
