import { Link } from '@/frame/components/Link'
import { GraphqlItem } from './GraphqlItem'
import { Table } from './Table'
import { useTranslation } from '@/languages/components/useTranslation'
import type { ObjectT, ImplementsT } from './types'

type Props = {
  item: ObjectT
}

export function Object({ item }: Props) {
  const { t } = useTranslation('graphql')
  const heading1 = t('reference.implements').replace('{{ GraphQLItemTitle }}', item.name)
  const heading2 = t('reference.fields').replace('{{ GraphQLItemTitle }}', item.name)

  return (
    <GraphqlItem item={item}>
      {item.implements && (
        <>
          <h3 dangerouslySetInnerHTML={{ __html: heading1 }} />
          <ul>
            {item.implements.map((implement: ImplementsT) => (
              <li key={`${implement.id}-${implement.href}-${implement.name}`}>
                <code>
                  <Link href={implement.href} makeAbsolute>
                    {implement.name}
                  </Link>
                </code>
              </li>
            ))}
          </ul>
        </>
      )}

      {item.fields && (
        <>
          <h3 dangerouslySetInnerHTML={{ __html: heading2 }} />
          <Table fields={item.fields} />
        </>
      )}
    </GraphqlItem>
  )
}
