import { notFound } from 'next/navigation'
import { getTranslations, setRequestLocale } from 'next-intl/server'
import { Link } from '@/i18n/navigation'
import { getForum, getTopics, countTopics } from '@/lib/forum'
import { getSession } from '@/lib/session'
import { PageShell } from '@/components/PageShell'
import { NewTopicForm } from '@/components/NewTopicForm'
import { Pagination } from '@/components/Pagination'

export const dynamic = 'force-dynamic'

const PER_PAGE = 20

export default async function ForumPage({
  params,
  searchParams,
}: {
  params: Promise<{ locale: string; forumId: string }>
  searchParams: Promise<{ page?: string }>
}) {
  const { locale, forumId } = await params
  setRequestLocale(locale)
  const t = await getTranslations('Forum')

  const id = Number(forumId)
  const forum = await getForum(id, locale)
  if (!forum) notFound()
  const total = await countTopics(id)
  const totalPages = Math.max(1, Math.ceil(total / PER_PAGE))
  const page = Math.min(Math.max(1, Number((await searchParams).page) || 1), totalPages)
  const topics = await getTopics(id, (page - 1) * PER_PAGE, PER_PAGE)
  const session = await getSession()
  const canPost = Boolean(session.username)

  return (
    <PageShell title={forum!.name}>
      <div className="box-content">
        <div className="body-box-content">
          <p>
            <Link href="/forum">← {t('backToForum')}</Link>
          </p>
          {forum!.description && <p className="second-brown">{forum!.description}</p>}
          <br />

          {topics.length === 0 ? (
            <p className="second-brown centered">{t('noTopics')}</p>
          ) : (
            <table className="max-center-table">
              <tbody>
                {topics.map((topic) => (
                  <tr key={topic.id} className="team-center-table-tr">
                    <td className="lefted separate">
                      <Link href={`/forum/topic/${topic.id}`} className="yellow-info">
                        {topic.sticky && <span className="second-yellow small-font">[{t('sticky')}] </span>}
                        {topic.locked && <span className="red-info2 small-font">[{t('locked')}] </span>}
                        {topic.name}
                      </Link>
                      <p className="third-brown small-font">
                        {t('by')} {topic.poster}
                      </p>
                    </td>
                    <td className="real-info-box no-wrap-td second-brown small-font">
                      {topic.views} {t('views')}
                    </td>
                  </tr>
                ))}
              </tbody>
            </table>
          )}

          <Pagination page={page} totalPages={totalPages} hrefFor={(p) => `/forum/${id}?page=${p}`} />

          {canPost ? (
            <NewTopicForm forumId={id} />
          ) : (
            <p className="second-brown centered separate">{t('loginToPost')}</p>
          )}
        </div>
      </div>
    </PageShell>
  )
}
