import React from 'react';

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

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

import { CreatorListData } from '@/types/Creator';
import { Event } from '@/types/Events';

import CreatorListClient from '@/app/[locale]/alkotok/CreatorListClient';

export async function generateMetadata(): Promise<Metadata> {
  const t = await getTranslations('creatorsWithProgramsPage.metadata');
  const canonical = '/alkotok-aktualis-programokkal';

  return {
    title: t('title'),
    description: t('description'),
    alternates: {
      canonical,
    },
  };
}

export default async function CreatorsWithProgramsPage() {
  const today = new Date();
  const oneYearLater = new Date();
  oneYearLater.setFullYear(today.getFullYear() + 1);

  let creators: CreatorListData[], events: Event[];
  try {
    [creators, events] = await Promise.all([
      getCreatorList(),
      getEventsByDate({
        fromDate: today.toISOString().split('T')[0].replace(/-/g, ''),
        toDate: oneYearLater.toISOString().split('T')[0].replace(/-/g, ''),
        showMultiday: true,
      }),
    ]);
  } catch (error) {
    console.error('Error loading creator data:', error);
    return notFound();
  }

  const creatorIdsWithEvents = new Set<string>(
    events.flatMap((event) =>
      event.szemely
        ?.map((person) => person.szemely.alkotoAzonosito)
        ?.filter((id): id is string => typeof id === 'string' && id !== '')
    )
  );

  const filteredCreators = creators.filter(
    (creator) =>
      typeof creator.alkotoAzonosito === 'string' &&
      creatorIdsWithEvents.has(creator.alkotoAzonosito)
  );

  const t = await getTranslations('navigation.programsDropdown');

  return (
    <div className="py-4">
      <CreatorListClient
        title={t('creatorsWithEvents')}
        creators={filteredCreators}
        hasCategoryHeader={false}
      />
    </div>
  );
}
