import React from 'react'
import cx from 'classnames'

import { HeadingLink } from '@/frame/components/article/HeadingLink'
import { BreakingChangesT } from './types'
import styles from '@/frame/components/ui/MarkdownContent/MarkdownContent.module.scss'

export type HeadingT = {
  title: string
  slug: string
}
type Props = {
  schema: BreakingChangesT
  headings: Record<string, HeadingT>
}

export function BreakingChanges({ schema, headings }: Props) {
  const changes = Object.keys(schema).map((date) => {
    const items = schema[date]
    const { title, slug } = headings[date]
    return (
      <div className={cx(styles.markdownBody)} key={date}>
        <HeadingLink as="h2" slug={slug}>
          {title}
        </HeadingLink>
        {items.map((item) => {
          const criticalityStyles =
            item.criticality === 'breaking'
              ? 'color-border-danger color-bg-danger'
              : 'color-border-accent-emphasis color-bg-accent'
          const criticality = item.criticality === 'breaking' ? 'Breaking' : 'Dangerous'

          return (
            <ul key={item.location}>
              <li>
                <span className={cx(criticalityStyles, 'border rounded-1 m-1 p-1')}>
                  {criticality}
                </span>{' '}
                A change will be made to <code>{item.location}</code>.
                <div>
                  <b>Description: </b>
                  <span dangerouslySetInnerHTML={{ __html: item.description }} />
                </div>
                <div>
                  <b>Reason: </b> <span dangerouslySetInnerHTML={{ __html: item.reason }} />
                </div>
              </li>
            </ul>
          )
        })}
      </div>
    )
  })

  return <div>{changes}</div>
}
