import { IDeliverer, IInteraction, Postconditions, Preconditions, Timing } from "./interfaces";
import { Phrase } from "./phrase";
import { Roles, RolesDescriptor } from "./roles";
import { Agent } from "./agent";
export declare class Deliverer implements IDeliverer {
    private _phrases;
    constructor(phrases: Phrase[]);
    get isFinished(): boolean;
    deliver(roles: Roles): Phrase;
}
export declare abstract class BaseInteraction implements IInteraction {
    private _name;
    private _description;
    private _preconditions;
    private _postconditions;
    private _timing;
    protected _isIntimate: boolean;
    constructor(name: string, description: string, timing: Timing, preconditions: Preconditions, postconditions: Postconditions);
    get name(): string;
    get description(): string;
    get preconditions(): Preconditions;
    get postconditions(): Postconditions;
    get isIntimate(): boolean;
    get timing(): Timing;
    abstract get deliverer(): IDeliverer;
    abstract get rolesDescriptor(): RolesDescriptor;
    abstract intimate(): IInteraction;
    equals(interaction: IInteraction): boolean;
    globallyEquals(interaction: IInteraction): boolean;
    getPermutations(main: Agent, other: Agent[]): Roles[];
    private calculateAgentCombinations;
    private fillRemainingPermutations;
}
export declare class Interaction extends BaseInteraction {
    private _phrases;
    private _rolesDescriptor;
    constructor(name: string, description: string, rolesDescriptor: RolesDescriptor, phrases: Phrase[], timing?: Timing, preconditions?: Preconditions, postconditions?: Postconditions);
    get deliverer(): IDeliverer;
    get rolesDescriptor(): RolesDescriptor;
    intimate(): IInteraction;
}
//# sourceMappingURL=interaction.d.ts.map