import axios from 'axios'
import toCamel from 'camelcase-keys'
import { useEffect, useState } from 'react'
import { Helmet } from 'react-helmet-async'
import { useLocation, useParams } from 'react-router-dom'

import PageTitle from '@/components/common/PageTitle'
import MainArea from '@/components/layout/MainArea'
import { API_BASE_URL, SITE_TITLE } from '@/config'
import { cn } from '@/lib/utils'

import type { WikiPageDiff } from '@/types'


export default () => {
  const { id } = useParams ()

  const location = useLocation ()

  const [diff, setDiff] = useState<WikiPageDiff | null> (null)

  const query = new URLSearchParams (location.search)
  const from = query.get ('from')
  const to = query.get ('to')

  useEffect (() => {
    void (async () => {
      const res = await axios.get (`${ API_BASE_URL }/wiki/${ id }/diff`, { params: { from, to } })
      setDiff (toCamel (res.data as any, { deep: true }) as WikiPageDiff)
    }) ()
  }, [])

  return (
      <MainArea>
	<Helmet>
	  <title>{`Wiki 差分: ${ diff?.title } | ${ SITE_TITLE }`}</title>
	</Helmet>
	<PageTitle>{diff?.title}</PageTitle>
	<div className="prose mx-auto p-4">
	  {diff
	   ? (
	      diff.diff.map (d => (
		  <span className={cn (d.type === 'added' && 'bg-green-200 dark:bg-green-800',
				       d.type === 'removed' && 'bg-red-200 dark:bg-red-800')}>
		    {d.content == '\n' ? <br/> : d.content}
		  </span>)))
	   : 'Loading...'}
	</div>
      </MainArea>)
}
