import { authenticate, requestServerInfo } from '$lib/utils/auth';
import { getFormatter } from '$lib/utils/i18n';
import { getAllLibraries, getLibraryStatistics, getUserAdmin, searchUsersAdmin } from '@immich/sdk';
import type { LayoutLoad } from './$types';

export const load = (async ({ url }) => {
  await authenticate(url, { admin: true });
  await requestServerInfo();
  const allUsers = await searchUsersAdmin({ withDeleted: false });
  const $t = await getFormatter();

  const libraries = await getAllLibraries();
  const statistics = await Promise.all(
    libraries.map(async ({ id }) => [id, await getLibraryStatistics({ id })] as const),
  );
  const owners = await Promise.all(
    libraries.map(async ({ id, ownerId }) => [id, await getUserAdmin({ id: ownerId })] as const),
  );

  return {
    allUsers,
    libraries,
    statistics: Object.fromEntries(statistics),
    owners: Object.fromEntries(owners),
    meta: {
      title: $t('external_libraries'),
    },
  };
}) satisfies LayoutLoad;
