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 { getFourWeekRangeFromWeekCode } from '@/utils/weekRange';

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

export async function generateMetadata({ params }: PageParams): Promise<Metadata> {
  const { week } = 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: {
      canonical: `/programok/${week}`,
    },
  };
}

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

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

  return <Calendar initialEvents={events} weekCode={week} />;
}
