import htmlParse from 'html-react-parser'
import { useReadingTime } from 'react-hook-reading-time'
import { useRouteLoaderData } from 'react-router'

import { Card } from '~/components/ui/card'
import { CarouselSection } from '~/components/ui/carousel-section'
import { NewsAuthor } from '~/components/ui/news-author'
import { SocialShareButtons } from '~/components/ui/social-share'
import { Tags } from '~/components/ui/tags'
import type { loader } from '~/routes/_news.detail.$slug'
import type { TNews } from '~/types/news'

export const NewsDetailPage = () => {
  const loaderData = useRouteLoaderData<typeof loader>(
    'routes/_news.detail.$slug',
  )
  const berita: TNews = {
    title: loaderData?.beritaCategory?.name || '',
    description: loaderData?.beritaCategory?.description || '',
    items: loaderData?.beritaNews || [],
  }
  const currentUrl = globalThis.location
  const { title, content, featured_image, author, live_at, tags } =
    loaderData?.newsDetailData || {}

  const { text } = useReadingTime(content || '')

  return (
    <div className="sm-max:mx-5 relative">
      <Card>
        <div className="py-5 sm:px-30">
          <h2 className="text-xl font-extrabold sm:text-4xl">{title}</h2>

          <div className="my-5 w-full items-center justify-between gap-2 align-middle sm:flex">
            <NewsAuthor
              author={author}
              live_at={live_at}
              text={text}
            />
            <SocialShareButtons
              url={`${currentUrl}`}
              title={`${title}`}
            />
          </div>

          <div className="w-full bg-amber-200">
            <img
              src={featured_image}
              alt={title}
              className="w-full object-cover object-center sm:h-[600px]"
            />
          </div>

          <div className="mt-8 flex items-center justify-center">
            <article className="prose prose-headings:my-0.5 prose-p:my-0.5">
              {content && htmlParse(content)}
            </article>
          </div>
          <div className="items-end justify-between border-b-gray-300 py-4 sm:flex">
            <div className="flex flex-col max-sm:mb-3">
              <p className="mb-2">Share this post</p>

              <SocialShareButtons
                url={`${currentUrl}`}
                title={`${title}`}
              />
            </div>

            <Tags tags={tags || []} />
          </div>
        </div>
      </Card>

      <Card className="bg-white p-5 max-sm:hidden">
        <CarouselSection {...berita} />
      </Card>
    </div>
  )
}
