import { Provider, Type } from '@nestjs/common';
import { EntityService } from './entity.service';
export interface TransitionEvent<T, P, Event, States> {
    event: Event | Event[];
    from: States | States[];
    to: States;
    actions?: ((entity: T, payload?: P | T | object | string) => Promise<T>)[];
    conditions?: ((entity: T, payload?: P | T | object | string) => boolean)[];
}
export interface KafkaEvent<Event> {
    topic: string;
    event: Event;
}
export interface WorkflowDefinition<T, P, Event, State> {
    name?: string;
    states: {
        finals: State[];
        idles: State[];
        failed: State;
    };
    options?: {};
    transitions: TransitionEvent<T, P, Event, State>[];
    actions?: Type<any>[];
    conditions?: Type<any>[];
    kafka?: {
        brokers: string;
        events: KafkaEvent<Event>[];
    };
    entity: Provider<EntityService<T, State>> | Type<EntityService<T, State>> | {
        new: () => T;
        update: (entity: T, status: State) => Promise<T>;
        load: (urn: string) => Promise<T>;
        status: (entity: T) => State;
        urn: (entity: T) => string;
    };
    fallback?: (entity: T, event: Event, payload?: P | T | object | string) => Promise<T>;
}
