import { TccTranslation, TccC4Node } from './shared.model';
export declare namespace TccWorkflow {
    enum LineDirection {
        horizontal = 0,
        vertical = 1
    }
    interface Position {
        x: number;
        y: number;
    }
    interface Line {
        direction: LineDirection;
        startPosition: Position;
    }
    type IncomingConnectors = Array<connectionPointDirection>;
    interface iShapeElement extends iElement {
        IncomingConnectors?: IncomingConnectors;
    }
    interface SpaceLinesElement {
        a?: Array<string>;
        b?: Array<string>;
    }
    interface SpaceLines {
        [propname: number]: {
            [propname: number]: SpaceLinesElement;
        };
    }
    interface Paths {
        [propname: string]: Path;
    }
    interface Path {
        position: Position;
        previous: Position;
        length: number;
        lines: number;
        direction: LineDirection;
        crossLine: string;
        order: number;
    }
    interface ElementsObj {
        [propname: string]: iElement;
    }
    type ShapeElement = ElementEventStart | ElementEventEnd | ElementActivityTaskUser | ElementActivityTaskScript | ElementActivityTaskService | ElementActivityTaskSubWorkflow | ElementGatewayExclusive | ElementGatewayParallel;
    const swimLaneMinHeight: number;
    type TccRect = Array<number>;
    type TccPoint = Array<number>;
    type TccId = string;
    type TccColor = string;
    type TccBusinessObjectItemEvents = any;
    type TccMemberDictionary = any;
    type TccPoints = Array<TccPoint>;
    enum State {
        ccWS_Unknown = "ccWS_Unknown",
        ccWS_Idle = "ccWS_Idle",
        ccWS_Finished = "ccWS_Finished"
    }
    enum connectionPointDirection {
        top = 1,
        right = 2,
        bottom = 3,
        left = 4
    }
    enum AnnotationIcons {
        ccAI_None = "ccAI_None",
        AI_Scanner = "AI_Scanner",
        ccAI_Printer = "ccAI_Printer",
        ccAI_Document = "ccAI_Document",
        ccAI_List = "ccAI_List",
        ccAI_Object = "ccAI_Object",
        ccAI_Process = "ccAI_Process",
        ccAI_Worker = "ccAI_Worker",
        ccAI_User = "ccAI_User",
        ccAI_Group = "ccAI_Group"
    }
    enum ActivityTaskService {
        ccTS_None = "ccTS_None",
        ccTS_Xtract = "ccTS_Xtract",
        ccTS_Classify = "ccTS_Classify"
    }
    enum ElementType {
        ElementEventStart = "TccWorkFlowElementEventStart",
        ElementEventIntermediate = "TccWorkFlowElementEventIntermediate",
        ElementEventEnd = "TccWorkFlowElementEventEnd",
        ElementActivityTaskUser = "TccWorkFlowElementActivityTaskUser",
        ElementActivityTaskScript = "TccWorkFlowElementActivityTaskScript",
        ElementActivityTaskService = "TccWorkFlowElementActivityTaskService",
        ElementActivityTaskSubWorkflow = "TccWorkFlowElementActivityTaskSubWorkflow",
        ElementConnectionSequenceFlow = "TccWorkFlowElementConnectionSequenceFlow",
        ElementConnectionDefaultFlow = "TccWorkFlowElementConnectionDefaultFlow",
        ElementConnectionConditionalFlow = "TccWorkFlowElementConnectionConditionalFlow",
        ElementGatewayExclusive = "TccWorkFlowElementGatewayExclusive",
        ElementGatewayParallel = "TccWorkFlowElementGatewayParallel"
    }
    interface TextAnnotation {
        Text: TccTranslation;
        Position: TccPoint;
    }
    type IconAnnotation = string;
    interface Annotations {
        Text: TextAnnotation;
        Icon: IconAnnotation;
    }
    interface ElementConnector {
        ElementId: TccId;
        SourcePoint?: number;
        TargetPoint?: number;
    }
    type ElementConnectors = Array<ElementConnector>;
    interface iElement {
        Id: TccId;
        Text?: TccTranslation;
        Description?: TccTranslation;
        Color?: TccColor;
        Position?: TccRect;
        Annotations?: Annotations;
        Connectors?: ElementConnectors;
        Type?: ElementType;
        SwimLane?: TccId;
    }
    type Elements = Array<Element>;
    interface ElementEventStart extends iShapeElement {
        BusinessObjectId: TccId;
        ItemEvents: TccBusinessObjectItemEvents;
    }
    interface ElementEventIntermediate extends iShapeElement {
    }
    interface ElementEventStartContainer {
        TccWorkFlowElementEventStart: ElementEventStart;
    }
    interface ElementEventIntermediateContainer {
        TccWorkFlowElementEventIntermediate: ElementEventIntermediate;
    }
    interface ElementEventEndContainer {
        TccWorkFlowElementEventEnd: ElementEventEnd;
    }
    interface ElementConnectionSequenceFlowContainer {
        TccWorkFlowElementConnectionSequenceFlow: ElementConnectionSequenceFlow;
    }
    interface ElementConnectionDefaultFlowContainer {
        TccWorkFlowElementConnectionDefaultFlow: ElementConnectionDefaultFlow;
    }
    interface ElementConnectionConditionalFlowContainer {
        TccWorkFlowElementConnectionConditionalFlow: ElementConnectionConditionalFlow;
    }
    interface ElementGatewayExclusiveContainer {
        TccWorkFlowElementGatewayExclusive: ElementGatewayExclusive;
    }
    interface ElementGatewayParallelContainer {
        TccWorkFlowElementGatewayParallel: ElementGatewayParallel;
    }
    interface ElementActivityTaskUserContainer {
        TccWorkFlowElementActivityTaskUser: ElementActivityTaskUser;
    }
    interface ElementActivityTaskScriptContainer {
        TccWorkFlowElementActivityTaskScript: ElementActivityTaskScript;
    }
    interface ElementActivityTaskServiceContainer {
        TccWorkFlowElementActivityTaskService: ElementActivityTaskService;
    }
    interface ElementActivityTaskSubWorkflowContainer {
        TccWorkFlowElementActivityTaskSubWorkflow: ElementActivityTaskSubWorkflow;
    }
    type Element = ElementEventStartContainer | ElementEventIntermediateContainer | ElementEventEndContainer | ElementActivityTaskUserContainer | ElementActivityTaskScriptContainer | ElementActivityTaskServiceContainer | ElementActivityTaskSubWorkflowContainer | ElementConnectionSequenceFlowContainer | ElementConnectionDefaultFlowContainer | ElementConnectionConditionalFlowContainer | ElementGatewayExclusiveContainer | ElementGatewayParallelContainer;
    interface ElementEventEnd extends iShapeElement {
    }
    interface ElementActivityTaskUser extends iShapeElement {
        Members: TccMemberDictionary;
    }
    interface ElementActivityTaskScript extends iShapeElement {
        ScriptId: TccId;
    }
    interface ElementActivityTaskService extends iShapeElement {
        Service: ActivityTaskService;
        ServiceId: TccId;
    }
    interface ElementActivityTaskSubWorkflow extends iShapeElement {
        WorkflowId: TccId;
    }
    interface ElementConnectionSequenceFlow extends iElement {
        WayPoints?: TccPoints;
        Lines?: Array<Line>;
        endPosition?: Position;
    }
    interface ElementConnectionDefaultFlow extends ElementConnectionSequenceFlow {
    }
    interface ElementConnectionConditionalFlow extends ElementConnectionSequenceFlow {
        Conditions: string;
    }
    interface ElementGatewayExclusive extends iShapeElement {
    }
    interface ElementGatewayParallel extends iShapeElement {
    }
    interface SwimLane extends iElement {
        Elements: Elements;
    }
    type SwimLanes = Array<SwimLane>;
    interface ElementGroup extends iElement {
        Elements: Array<TccId>;
    }
    interface ElementGroups {
        [k: string]: ElementGroup;
    }
    interface Pool extends iElement {
        SwimLanes: SwimLanes;
        Groups?: ElementGroups;
    }
    type Pools = Array<Pool>;
    interface Workflow extends TccC4Node {
        Pools: Pools;
    }
}
