import type { Metadata } from 'next'
import { getTranslations, setRequestLocale } from 'next-intl/server'
import { CourseDetailView } from '@/components/course-detail-view'
import { JsonLd } from '@/components/seo/json-ld'
import type { Locale } from '@/i18n/config'
import { fetchCourseBySlug } from '@/lib/courses-server'
import { hasRealCourseImage } from '@/lib/course-image'
import { buildShareMetadata } from '@/lib/metadata'
import { getStaticSiteSettings } from '@/lib/site-settings'
import {
  buildBreadcrumbJsonLd,
  buildCourseJsonLd,
} from '@/lib/structured-data'

type CoursePageProps = {
  params: Promise<{ locale: string; slug: string }>
}

export async function generateMetadata({ params }: CoursePageProps): Promise<Metadata> {
  const { locale, slug } = await params
  const t = await getTranslations({ locale, namespace: 'training.detail' })
  const site = getStaticSiteSettings()
  const course = await fetchCourseBySlug(slug, locale)

  if (!course) {
    return {
      title: t('metaTitleFallback'),
      description: site.description,
      robots: { index: false, follow: true },
    }
  }

  const description = (course.description || site.description).trim()
  const image = hasRealCourseImage(course.image) ? course.image : undefined

  return buildShareMetadata({
    title: course.title,
    description: description.slice(0, 300),
    path: `/courses/${course.slug}`,
    image,
    imageAlt: `${course.title} — ${site.shortName}`,
    site,
    locale,
    // No course photo → no OG image (do not fall back to site/hero art).
    fallbackImage: false,
  })
}

export default async function CourseDetailPage({ params }: CoursePageProps) {
  const { locale, slug } = await params
  setRequestLocale(locale)
  const site = getStaticSiteSettings()
  const course = await fetchCourseBySlug(slug, locale)
  const resolvedLocale = locale as Locale

  return (
    <>
      {course ? (
        <JsonLd
          data={[
            buildCourseJsonLd(course, resolvedLocale, site),
            buildBreadcrumbJsonLd(
              [
                { name: 'Home', path: '/' },
                { name: 'Courses', path: '/courses' },
                { name: course.title, path: `/courses/${course.slug}` },
              ],
              resolvedLocale,
              site,
            ),
          ]}
        />
      ) : null}
      <CourseDetailView key={slug} />
    </>
  )
}
