import type { BasicCursorPaginationOptions, BasicMetaSysProps, SysLink } from '../common-types';
export type AutomationDefinitionStatus = 'published';
export type AutomationDefinitionTriggerTopic = 'Workflow.create' | 'Workflow.save' | 'Workflow.complete' | 'Entry.create' | 'Entry.delete' | 'Entry.save' | 'Entry.publish' | 'Entry.unpublish' | 'Entry.archive' | 'Entry.unarchive';
export type AutomationDefinitionTrigger = {
    type: 'event';
    topic: AutomationDefinitionTriggerTopic;
    constraints?: Record<string, unknown>;
} | {
    type: 'schedule';
    rrule: string;
    constraints?: Record<string, unknown>;
};
export type AutomationDefinitionActionType = 'cma.aiAction.invoke' | 'cma.entry.get' | 'cma.entry.getMany' | 'cma.entry.create' | 'cma.entry.publish' | 'cma.entry.unpublish' | 'cma.entry.patch' | 'cma.entry.delete' | 'cma.entry.archive' | 'cma.entry.unarchive' | 'cma.workflow.update' | 'cma.workflow.create' | 'cma.workflow.complete' | 'cma.appActionCall.createWithResult';
export interface AutomationDefinitionAction {
    type: AutomationDefinitionActionType;
    parameters: Record<string, unknown>;
}
export interface AutomationDefinitionConditionStepCondition {
    nextStepId: string | null;
    constraints: Record<string, unknown>;
}
export interface AutomationDefinitionBaseStep {
    id: string;
    name: string;
    description?: string;
    nextStepId: string | null;
}
export interface AutomationDefinitionActionStep extends AutomationDefinitionBaseStep {
    type: 'action';
    action: AutomationDefinitionAction;
}
export interface AutomationDefinitionConditionStep extends AutomationDefinitionBaseStep {
    type: 'condition';
    conditions: AutomationDefinitionConditionStepCondition[];
}
export interface AutomationDefinitionLoopStep extends AutomationDefinitionBaseStep {
    type: 'loop';
    items: string;
    mode: 'sequential';
    steps: AutomationDefinitionStep[];
}
export type AutomationDefinitionStep = AutomationDefinitionActionStep | AutomationDefinitionConditionStep | AutomationDefinitionLoopStep;
export type AutomationDefinitionSysProps = Pick<BasicMetaSysProps, 'id' | 'version' | 'createdAt' | 'createdBy' | 'updatedAt' | 'updatedBy'> & {
    type: 'AutomationDefinition';
    space: SysLink;
    environment: SysLink;
    organization: SysLink;
};
export interface AutomationDefinitionProps {
    sys: AutomationDefinitionSysProps;
    name: string;
    description?: string;
    triggers: AutomationDefinitionTrigger[];
    steps: AutomationDefinitionStep[];
    status: AutomationDefinitionStatus;
}
export type CreateAutomationDefinitionProps = Omit<AutomationDefinitionProps, 'sys'>;
export type UpdateAutomationDefinitionProps = Omit<AutomationDefinitionProps, 'sys'> & {
    sys: Pick<AutomationDefinitionSysProps, 'version'>;
};
export interface AutomationDefinitionQueryOptions extends BasicCursorPaginationOptions {
    order?: 'sys.createdAt' | '-sys.createdAt' | 'sys.updatedAt' | '-sys.updatedAt';
}
