import CardsGrid from "@/components/Blocks/CardsGrid"
import DynamicContent from "@/components/Blocks/DynamicContent"
import ShortcutsList from "@/components/Blocks/ShortcutsList"
import JsonToHtml from "@/components/JsonToHtml"
import { getLang } from "@/i18n/serverContext"
import { modWebviewLink } from "@/utils/webviews"

import type { BlocksProps } from "@/types/components/blocks"
import { BlocksEnums } from "@/types/enums/blocks"

export default async function Blocks({ blocks }: BlocksProps) {
  const lang = await getLang()

  return Promise.all(
    blocks.map(async (block, idx) => {
      switch (block.typename) {
        case BlocksEnums.block.CardsGrid:
          return (
            <CardsGrid
              key={`${block.cards_grid.title}-${idx}`}
              cards_grid={block.cards_grid}
            />
          )
        case BlocksEnums.block.Content:
          return (
            <JsonToHtml
              key={`${block.__typename}-${idx}`}
              nodes={block.content.json.children}
              embeds={block.content.embedded_itemsConnection.edges}
            />
          )
        case BlocksEnums.block.DynamicContent:
          const dynamicContent = {
            ...block.dynamic_content,
            link: block.dynamic_content.link
              ? {
                  ...block.dynamic_content.link,
                  href: await modWebviewLink(
                    block.dynamic_content.link.href,
                    lang
                  ),
                }
              : undefined,
          }

          return (
            <DynamicContent
              dynamic_content={dynamicContent}
              key={`${block.dynamic_content.title}-${idx}`}
            />
          )
        case BlocksEnums.block.Shortcuts:
          const shortcuts = await Promise.all(
            block.shortcuts.shortcuts.map(async (shortcut) => ({
              ...shortcut,
              url: await modWebviewLink(shortcut.url, lang),
            }))
          )
          return (
            <ShortcutsList
              key={`${block.shortcuts.title}-${idx}`}
              shortcuts={shortcuts}
              subtitle={block.shortcuts.subtitle}
              title={block.shortcuts.title}
              hasTwoColumns={block.shortcuts.hasTwoColumns}
            />
          )
        default:
          return null
      }
    })
  )
}
