import React from 'react';
import * as BlockComponents from 'src/components/blocks';
import {ComponentMap} from 'src/interfaces';

// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const ComponentRenderer = (item: any, language: string) => {
  const defaultComponentsMap: ComponentMap = {
    [BlockComponents.ACCORDION_NAME]: BlockComponents.Accordion,
    [BlockComponents.BLUE_BG_IMAGE_VIDEO_NAME]: BlockComponents.BlueBGImageVideo,
    [BlockComponents.CENTERED_TEXT_MODULE_NAME]: BlockComponents.CenteredTextModule,
    [BlockComponents.COLOR_BLOCKS_NAME]: BlockComponents.ColorBlocks,
    [BlockComponents.CARD_GRID_NAME]: BlockComponents.CardGrid,
    [BlockComponents.FLEXIBLE_TEXT_NAME]: BlockComponents.FlexibleText,
    [BlockComponents.FULL_IMAGE_VIDEO_NAME]: BlockComponents.FullImageVideo,
    [BlockComponents.HALF_IMAGE_VIDEO_NAME]: BlockComponents.HalfImageVideo,
    [BlockComponents.HUBSPOT_FORM_NAME]: BlockComponents.Hubspot,
    [BlockComponents.HERO_CAROUSEL_NAME]: BlockComponents.HeroCarousel,
    [BlockComponents.HTML_MODULE_NAME]: BlockComponents.HtmlModule,
    [BlockComponents.IMAGE_TEXT_GRID_NAME]: BlockComponents.ImageTextGrid,
    [BlockComponents.INLINE_IMAGE_TEXT_NAME]: BlockComponents.InlineImageText,
    [BlockComponents.LINK_BLOCKS_NAME]: BlockComponents.LinkBlocks,
    [BlockComponents.PROGRAM_STEPS_NAME]: BlockComponents.ProgramSteps,
    [BlockComponents.QUIT_HERO_NAME]: BlockComponents.QuitHero,
    [BlockComponents.RESOURCE_HERO_NAME]: BlockComponents.ResourceHero,
    [BlockComponents.SELECT_AND_GO_NAME]: BlockComponents.SelectAndGo,
    [BlockComponents.SOUNDCLOUD_MODULE_NAME]: BlockComponents.SoundCloudModule,
    [BlockComponents.STATS_MODULE_NAME]: BlockComponents.StatsModule,
    [BlockComponents.STYLEGUIDE_TITLE_NAME]: BlockComponents.StyleguideTitle,
    [BlockComponents.TESTIMONIALS_NAME]: BlockComponents.Testimonials,
    [BlockComponents.TEXT_MODULE_NAME]: BlockComponents.TextModule,
    [BlockComponents.TIMELINE_CAROUSEL_NAME]: BlockComponents.TimelineCarousel,
    [BlockComponents.PATIENT_REFERRAL_TEXT_NAME]: BlockComponents.ReferPatientOrClient,
    [BlockComponents.STUDENT_REFERRAL_TEXT_NAME]: BlockComponents.ReferStudent,
    [BlockComponents.NAVIGATION_SECTION_HEADER_NAME]: BlockComponents.NavigationSectionHeader,
    [BlockComponents.HEADLINE_WITH_COLOR_NAME]: BlockComponents.HeadlineWithColorBand,
    [BlockComponents.FLIP_CARD_NAME]: BlockComponents.FlipCardVariant,
    [BlockComponents.TIME_BLOCK_NAME]: BlockComponents.TimeBlock,
  };

  const Component: any = defaultComponentsMap[item.content[0].__typename];

  return <React.Fragment>{Component && <Component {...item.content[0]} language={language} />}</React.Fragment>;
};
