import type { Unsubscribe } from "../../types/unsubscribe";
import type { ModelContextProvider } from "../../model-context/types";
import { CompositeContextProvider } from "../../utils/composite-context-provider";
import type { AssistantRuntimeCore } from "../interfaces/assistant-runtime-core";
import type { ThreadListRuntimeCore } from "../interfaces/thread-list-runtime-core";

export abstract class BaseAssistantRuntimeCore implements AssistantRuntimeCore {
  protected readonly _contextProvider = new CompositeContextProvider();
  public abstract get threads(): ThreadListRuntimeCore;

  public registerModelContextProvider(
    provider: ModelContextProvider,
  ): Unsubscribe {
    return this._contextProvider.registerModelContextProvider(provider);
  }

  public getModelContextProvider(): ModelContextProvider {
    return this._contextProvider;
  }
}
