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

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

import TerkepClient from '@/app/[locale]/alkoto/[id]/(network-layout)/terkep/TerkepClient';

export default async function CreatorMapPage({ params }: { params: Promise<{ id: string }> }) {
  const { id } = await params;
  const creatorId = id?.trim() || '';
  const creator = await getCreatorDataCached(creatorId);

  if (!creator || !creator.hasCreationMapData) {
    notFound();
  }

  const creations = await getCreationList({
    personIdentifierList: [creatorId],
  });

  return (
    <TerkepClient
      creatorId={creatorId}
      creatorName={creator.nev || ''}
      creatorArtBranchEnum={creator.muveszetiAgEnum}
      creatorArtBranchName={creator.muveszetiAg}
      creations={creations}
    />
  );
}

export async function generateMetadata({
  params,
}: {
  params: Promise<{ id: string }>;
}): Promise<Metadata> {
  const { id } = await params;
  const creatorId = id?.trim() || '';
  const creator = creatorId ? await getCreatorDataCached(creatorId).catch(() => null) : null;
  const tGrid = await getTranslations('creatorPage.grid');
  const tMapMeta = await getTranslations('mapViewPage.metaData');

  const mapTitle = tGrid('terkep');
  const creatorName = creator?.nev?.trim() || '';
  const title = creatorName ? `${creatorName} - ${mapTitle}` : mapTitle;
  const canonical = creatorId ? `/alkoto/${creatorId}/terkep` : '/alkotok';
  const description = tMapMeta('description');

  return {
    title,
    description,
    alternates: { canonical },
    openGraph: {
      url: canonical,
      title,
      description,
      type: 'website',
      locale: 'hu_HU',
    },
    twitter: {
      card: 'summary_large_image',
      title,
      description,
    },
  };
}
