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

import { getCreatorDataCached } from '@/services/creatorsCache';
import { getGraphData } from '@/services/graph';

import type { ConnectionPerson } from '@/components/Interactive2DGraph';

import MuveszetiHaloClient from '@/app/[locale]/alkoto/[id]/(network-layout)/muveszeti-halo/MuveszetiHaloClient';

export default async function CreatorArtNetworkPage({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  const { id } = await params;
  const creatorId = id?.trim() || null;
  let connections: ConnectionPerson[] = [];
  let creatorName: string | null = null;
  let creatorArtBranchEnum: string | null = null;
  let creatorArtBranchName: string | null = null;

  try {
    const graphData = await getGraphData();
    const payload =
      graphData && typeof graphData === 'object' && 'personList' in graphData
        ? (graphData as { personList: unknown }).personList
        : graphData;
    connections = Array.isArray(payload) ? payload : [];
  } catch (error) {
    console.error('Failed to load art network data:', error);
    connections = [];
  }

  if (creatorId) {
    try {
      const creatorData = await getCreatorDataCached(creatorId);
      creatorName = creatorData?.nev?.trim() || null;
      creatorArtBranchEnum = creatorData?.muveszetiAgEnum ?? null;
      creatorArtBranchName = creatorData?.muveszetiAg ?? null;
    } catch (error) {
      console.error('Failed to load creator data for art network:', error);
      creatorName = null;
      creatorArtBranchEnum = null;
      creatorArtBranchName = null;
    }
  }

  return (
    <MuveszetiHaloClient
      connections={connections}
      initialCreatorId={creatorId || undefined}
      initialCreatorName={creatorName || undefined}
      initialCreatorArtBranchEnum={creatorArtBranchEnum || undefined}
      initialCreatorArtBranchName={creatorArtBranchName || undefined}
    />
  );
}

// METADATA
export async function generateMetadata({
  params,
}: {
  params?: Promise<{ id?: string }>;
}): Promise<Metadata> {
  const t = await getTranslations('connectionsGraph');
  const tHome = await getTranslations('home.artNetwork');
  const awaitedParams = await params;
  const creatorId = awaitedParams?.id?.trim() || '';
  const creatorData = creatorId ? await getCreatorDataCached(creatorId).catch(() => null) : null;
  const creatorName = creatorData?.nev?.trim() || '';
  const title = creatorName ? `${creatorName} - ${t('title')}` : t('title');
  const canonical = creatorId ? `/alkoto/${creatorId}/muveszeti-halo` : '/alkotok';

  return {
    title,
    description: tHome('description'),
    alternates: {
      canonical,
    },
    robots: { index: false, follow: true },
    openGraph: {
      url: canonical,
      title,
      description: tHome('description'),
      type: 'website',
      locale: 'hu_HU',
    },
    twitter: {
      card: 'summary_large_image',
      title,
      description: tHome('description'),
    },
  };
}
