import RTETextBlockRenderer from './blocks/text-block-renderer';
import RTEImageBlockRenderer from './blocks/image-block-renderer';
import RTEListBlockRenderer from './blocks/list-block-renderer';
import RTEListItemBlockRenderer from './blocks/list-item-block-renderer';
import RTECodeBlockRenderer from './blocks/code-block-renderer';
import RTEHTMLBlockRenderer from './blocks/html-block-renderer';
import ImageNodeRenderer from './nodes/image-node-renderer';
import TextNodeRenderer from './nodes/text-node-renderer';
import RTEDTORendererManager from '../../../../helpers/rte-manager/dto-renderer-manager';
/**
 * RTEBlockRendererFactory is a factory class that provides methods to get the appropriate block renderer.
 * It registers various block renderers for different types of blocks and nodes.
 */
class RTEBlockRendererFactory {
  /**
   * Registers the default block renderers and node renderers.
   */
  constructor() {
    RTEDTORendererManager.registerRTEDTORenderer('title', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('subtitle', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('paragraph', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('heading-1', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('heading-2', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('heading-3', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('heading-4', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('heading-5', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('heading-6', RTETextBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('bullet-list', RTEListBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('number-list', RTEListBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('list-item', RTEListItemBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('image', RTEImageBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('code-block', RTECodeBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('html-block', RTEHTMLBlockRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('TEXT', TextNodeRenderer);
    RTEDTORendererManager.registerRTEDTORenderer('IMAGE', ImageNodeRenderer);
  }
  /**
   * getBlockRenderer retrieves the renderer for a given block type.
   *
   * @param {string} type - The type of the block for which the renderer is needed.
   * @returns {Nullable<BaseBlockRenderer>} - The renderer instance if found, otherwise null.
   */
  getBlockRenderer(type) {
    return RTEDTORendererManager.getRTERenderer(type);
  }
}
export default new RTEBlockRendererFactory();
