// @vitest-environment jsdom
import { BaseService } from '@learnitive/base-utils';
import { ThemeManager } from '@learnitive/color-scheme-manager';
import { createEditorSaveCoordinator } from '@learnitive/editor';
import { makeTestCommonOpts } from '@learnitive/test-utils';
import { expect, test } from 'vitest';
import { initializeServices } from '../index';

test('initializeServices returns unique service names', async () => {
  const { commonOpts, rootEmitter, controller } = makeTestCommonOpts();

  const services = await initializeServices(
    commonOpts.logger,
    rootEmitter,
    commonOpts.store,
    new ThemeManager(),
    controller.signal,
    createEditorSaveCoordinator(),
  );

  const serviceNames = Object.keys(services.core);
  const serviceValues = Object.values(services.core);

  const uniqueServiceNames = new Set(serviceNames);

  expect(uniqueServiceNames.size).toBe(serviceNames.length);

  controller.abort();

  for (const service of serviceValues) {
    if (service instanceof BaseService) {
      expect(service.aborted).toBe(true);
    } else {
      throw new Error('Unexpected service type');
    }
  }
});
