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

import { getEventsByDate } from '@/services/events';

import Calendar from '@/components/calendar/Calendar';
import LanguageNotice from '@/components/common/LanguageNotice';
import { getLocalizedAlternates } from '@/utils/seo';
import { getFourWeekRangeFromWeekCode } from '@/utils/weekRange';

interface PageParams {
  params: Promise<{ week: string; locale: string }>;
}

export async function generateMetadata({ params }: PageParams): Promise<Metadata> {
  const { week, locale } = await params;
  const t = await getTranslations('eventsPage.metaData');
  const range = getFourWeekRangeFromWeekCode(week);

  if (!range) {
    return {
      title: t('title'),
      description: t('description'),
    };
  }

  return {
    title: t('title'),
    description: t('description'),
    alternates: getLocalizedAlternates(locale, {
      pathname: '/programok/[week]',
      params: { week },
    }),
  };
}

export default async function ProgramsWeekPage({ params }: PageParams) {
  const { week, locale } = await params;
  const range = getFourWeekRangeFromWeekCode(week);
  if (!range) return notFound();

  const events = await getEventsByDate({
    fromDate: range.fromDate,
    toDate: range.toDate,
    showMultiday: true,
  });

  return (
    <>
      {locale === 'en' && (
        <div className="pb-4">
          <LanguageNotice />
        </div>
      )}
      <Calendar initialEvents={events} weekCode={week} />
    </>
  );
}
