import { Metadata } from 'next';
import { getTranslations } from 'next-intl/server';

import { getCreationList } from '@/services/creations';

import Breadcrumbs, { BreadcrumbItem } from '@/components/common/Breadcrumbs';
import LanguageNotice from '@/components/common/LanguageNotice';
import { getLocalizedAlternates, getLocalizedUrl, resolveAppLocale } from '@/utils/seo';

import { CreationListItem } from '@/types/Creation';

import CreationListClient from '@/app/[locale]/alkotasok/CreationListClient';

export async function generateMetadata({
  params,
}: {
  params: Promise<{ locale: string }>;
}): Promise<Metadata> {
  const { locale } = await params;
  const resolvedLocale = resolveAppLocale(locale);
  const t = await getTranslations('videosPage.metaData');
  const url = getLocalizedUrl(resolvedLocale, '/videok');

  return {
    title: t('title'),
    description: t('description'),
    alternates: getLocalizedAlternates(locale, '/videok'),
    openGraph: {
      url,
      title: t('title'),
      description: t('description'),
      type: 'website',
      locale: resolvedLocale,
    },
    twitter: {
      card: 'summary_large_image',
      title: t('title'),
      description: t('description'),
    },
  };
}

export default async function VideoListPage({ params }: { params: Promise<{ locale: string }> }) {
  const { locale } = await params;
  const allCreations: CreationListItem[] = await getCreationList({
    videoType: ['alkotas_video'],
  });
  const creations = allCreations.filter((c) => c.hivatkozasLista?.[0]?.status === 'public');

  // Extract and process years
  const years = creations
    .map((c: CreationListItem) => c.labelYear)
    .filter((year: number | null): year is number => typeof year === 'number' && year !== 1000);

  const maxYear = years.length > 0 ? Math.max(...years) : new Date().getFullYear();
  const minYear = years.length > 0 ? Math.min(...years) : maxYear - 100;

  // Get unique years sorted descending (newest first)
  const availableYears: number[] = [...new Set<number>(years)].sort((a, b) => b - a);

  const t = await getTranslations('navigation.menu');
  const breadcrumbItems = [
    {
      label: t('videos'),
      href: { pathname: '/videok' },
    },
  ] satisfies BreadcrumbItem[];

  return (
    <>
      <Breadcrumbs items={breadcrumbItems} className="px-site" />
      {locale === 'en' && (
        <div className="px-site pt-4">
          <LanguageNotice />
        </div>
      )}
      <CreationListClient
        title={t('videos')}
        creations={creations}
        min={minYear}
        max={maxYear}
        initialYear={maxYear}
        availableYears={availableYears}
        showCreatorProfession
      />
    </>
  );
}
