import type { Metadata } from 'next'

import { notFound } from 'next/navigation'

import { generateArtikelHubMetadata, generateArtikelPaginationParams, renderArtikelHubPage } from '../../shared'

type Args = {
  params: Promise<{
    page?: string
  }>
}

const parsePageNumber = (value: string | undefined) => {
  if (!value) {
    return null
  }

  const parsed = Number.parseInt(value, 10)

  if (!Number.isFinite(parsed) || parsed < 2) {
    return null
  }

  return parsed
}

export async function generateStaticParams() {
  return generateArtikelPaginationParams()
}

export default async function ArtikelPaginationPage({ params }: Args) {
  const pageNumber = parsePageNumber((await params).page)

  if (!pageNumber) {
    return notFound()
  }

  return renderArtikelHubPage(pageNumber)
}

export async function generateMetadata({ params }: Args): Promise<Metadata> {
  const pageNumber = parsePageNumber((await params).page)

  if (!pageNumber) {
    notFound()
  }

  return generateArtikelHubMetadata(pageNumber)
}
