import { Module, ModuleDeclaration, Container } from 'ditox';

/**
 * Jazz SDK Plugin provides additional features.
 */
type JazzSdkPreloadPlugin<T extends Module<AnyObject> = Module<AnyObject>> =
  () => {
    key: string | undefined;
    module: JazzSdkPreloadModuleDeclaration<T>;
  };
type JazzSdkPreloadModuleDeclaration<
  T extends JazzSdkPreloadModule<AnyObject> = JazzSdkPreloadModule<AnyObject>,
> = ModuleDeclaration<T>;
type JazzSdkPreloadModule<T extends AnyObject = AnyObject> = Module<T>;
type JazzSdkPreloadAdditionalPlugins = ReadonlyArray<JazzSdkPreloadPlugin>;
type AnyObject = Record<string, any>;

type JazzSdkElectronPreloadOptions = {
  container?: Container;
  plugins?: JazzSdkPreloadAdditionalPlugins;
};
type JazzSdkElectronPreload = {
  destroy: () => void;
  container: Container;
};

declare const createJazzSdkElectronPreload: (
  options?: JazzSdkElectronPreloadOptions,
) => JazzSdkElectronPreload;

export { type JazzSdkElectronPreloadOptions, createJazzSdkElectronPreload };
