import { getCreatorList } from '@/services/creators';
import type { HomepageCollectionTextFields } from '@/services/homeCollections';

import HomepageInteractiveCreatorPickerClient from './HomepageInteractiveCreatorPickerClient';

interface HomepageInteractiveCreatorPickerProps {
  locale: string;
  textFields?: HomepageCollectionTextFields | null;
}

export interface InteractiveCreatorPickerItem {
  alkotoAzonosito: string;
  nev: string;
  szakma: string;
  profilkepKey: string | null;
}

const CREATOR_PAGE_SIZE = 1000;
const MAX_CREATOR_PAGES = 20;

const getAllCreators = async () => {
  const allCreators: Awaited<ReturnType<typeof getCreatorList>> = [];

  for (let page = 0; page < MAX_CREATOR_PAGES; page += 1) {
    const firstResult = page * CREATOR_PAGE_SIZE;
    const chunk = await getCreatorList({
      body: {
        firstResult,
        maxResults: CREATOR_PAGE_SIZE,
        onlyWithData: true,
      },
    });

    if (!chunk.length) break;
    allCreators.push(...chunk);
    if (chunk.length < CREATOR_PAGE_SIZE) break;
  }

  return allCreators;
};

const HomepageInteractiveCreatorPicker: React.FC<HomepageInteractiveCreatorPickerProps> = async ({
  locale,
  textFields,
}) => {
  const sortLocale = locale.startsWith('en') ? 'en' : 'hu';
  let creators: InteractiveCreatorPickerItem[] = [];

  try {
    const response = await getAllCreators();

    creators = response
      .filter((creator) => Boolean(creator.alkotoAzonosito?.trim()) && Boolean(creator.nev?.trim()))
      .map((creator) => ({
        alkotoAzonosito: creator.alkotoAzonosito.trim(),
        nev: creator.nev!.trim(),
        szakma: creator.szakma?.trim() || '',
        profilkepKey: creator.profilkep?.key || null,
      }))
      .sort((a, b) => a.nev.localeCompare(b.nev, sortLocale));
  } catch (error) {
    console.error('Failed to preload creators for interactive picker:', error);
  }

  return <HomepageInteractiveCreatorPickerClient creators={creators} textFields={textFields} />;
};

export default HomepageInteractiveCreatorPicker;
