import { LoyaltyPageRefsDataRaw } from "./output"

import { LoyaltyBlocksTypenameEnum } from "@/types/components/loyalty/enums"
import type { Edges } from "@/types/requests/utils/edges"
import type { NodeRefs } from "@/types/requests/utils/refs"

export function getConnections(refs: LoyaltyPageRefsDataRaw) {
  const connections: Edges<NodeRefs>[] = []
  if (refs.loyalty_page.blocks) {
    refs.loyalty_page.blocks.forEach((item) => {
      switch (item.__typename) {
        case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksContent: {
          if (item.content.content.embedded_itemsConnection.edges.length) {
            connections.push(item.content.content.embedded_itemsConnection)
          }
          break
        }
        case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksCardsGrid: {
          connections.push(item.cards_grid.cardConnection)
          item.cards_grid.cardConnection.edges.forEach((card) => {
            if (card.node.primary_button) {
              connections.push(card.node.primary_button?.linkConnection)
            } else if (card.node.secondary_button) {
              connections.push(card.node.secondary_button?.linkConnection)
            }
          })

          break
        }
        case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksShortcuts: {
          item.shortcuts.shortcuts.forEach((shortcut) => {
            if (shortcut.linkConnection.edges.length) {
              connections.push(shortcut.linkConnection)
            }
          })
          break
        }
        case LoyaltyBlocksTypenameEnum.LoyaltyPageBlocksDynamicContent: {
          if (item.dynamic_content.link.pageConnection.edges.length) {
            connections.push(item.dynamic_content.link.pageConnection)
          }
          break
        }
      }
    })
  }
  if (refs.loyalty_page.sidebar) {
    refs.loyalty_page.sidebar?.forEach((item) => {
      if (item.content.content.embedded_itemsConnection.edges.length) {
        connections.push(item.content.content.embedded_itemsConnection)
      }
    })
  }

  return connections
}
