import { IEventData, IEntity } from '@awesome-ecs/abstract/entities';
import { a as WorkerResponseMessage, W as WorkerRequestMessage } from '../worker-queue-DomXrtWj.cjs';
export { I as IWorkerMessageQueue, e as WorkerInstance, d as WorkerInstanceResponse, f as WorkerMessageType, c as WorkerMessageUid, b as WorkerUid } from '../worker-queue-DomXrtWj.cjs';
import { T as ThreadWorkerType } from '../worker-type-comvmkQN.cjs';
export { M as MultiplexWorkerType } from '../worker-type-comvmkQN.cjs';
import { PerformanceTimeEntry } from '@awesome-ecs/abstract/utils';
import { ISystemContext } from '@awesome-ecs/abstract/systems';

declare enum WorkerThreadEventType {
    messageReceivedHealth = "message-received-health",
    messageReceivedData = "message-received-data"
}

interface WorkerThreadEventMessageResponseData<TResponseData> extends IEventData {
    message: WorkerResponseMessage<TResponseData>;
    error?: ErrorEvent;
    messageError?: MessageEvent;
}

declare enum WorkerComponentType {
    workerInstance = "worker-instance"
}

declare enum WorkerEntityType {
    workerThread = "worker-thread"
}

interface IWorkerFactory {
    createWorker(type: ThreadWorkerType, name: string): Worker;
}

interface WorkerThreadHealthRequest {
    heartbeatValue: string;
}
interface WorkerThreadHealthResponse {
    heartbeatValue: string;
    metrics: PerformanceTimeEntry[];
}

interface IWorkerSystemPipelineContext<TEntity extends IEntity> extends ISystemContext<TEntity> {
    sendWorkerMessage(message: WorkerRequestMessage<any>): void;
}

export { type IWorkerFactory, type IWorkerSystemPipelineContext, ThreadWorkerType, WorkerComponentType, WorkerEntityType, WorkerRequestMessage, WorkerResponseMessage, type WorkerThreadEventMessageResponseData, WorkerThreadEventType, type WorkerThreadHealthRequest, type WorkerThreadHealthResponse };
