import {AssetLoader} from "./asset/loaders/AssetLoader";
import {System} from "./ecs/System";
import {StaticKnowledgeDataTableDescriptor} from "./knowledge/database/StaticKnowledgeDataTableDescriptor";
import {EnginePlugin} from "./plugin/EnginePlugin";

export class EngineConfiguration {
    addPlugin(plugin: EnginePlugin): boolean

    addSystem<A, B, C, D, E>(system: System<A, B, C, D, E>): boolean

    addManySystems(...systems: System<any>[]): void

    addDataTable<T>(table: StaticKnowledgeDataTableDescriptor<T>): boolean

    addLoader<T, CTX>(type: string, loader: AssetLoader<T, CTX>): boolean

    hasLoader(type: string): boolean

    apply(engine): Promise<any>
}
