import { AssignedType, CurrentStep, JobAttachment } from '../job';
import { ExtendedPropertyDomainType, ExtendedPropertyTableRelationshipType, PortalType } from '../extendedPropertyDefinition';
import { AssignmentMethod, CommentEnabledStep, GeometryType, MethodType, StepMode, SurveyMode, SurveyRecordType } from '../shared';
import { SpatialAssignmentOptions, UserDefinedAssignmentOptions } from '../steps/advancedAssignment';
export type AbstractNotificationMessage = NotificationMessage | ItemNotificationMessage;
export interface NotificationMessage {
    msgType: string;
    message: MessageDetails;
    timestamp?: number;
    token?: string;
}
export interface ItemNotificationMessage {
    msgType: string;
    message: MessageDetailsWithItemId;
    timestamp?: number;
    token?: string;
}
export interface MessageDetails {
    jobId: string;
}
export interface HeldStepMessageDetails extends MessageDetails {
    scheduledRelease?: Date;
    dependency?: boolean;
    setBy?: string;
}
export interface JobUpdatedMessageDetails extends MessageDetails {
    properties: JobUpdatedPropertyDetails;
}
export interface JobUpdatedPropertyDetails {
    jobProperties?: UpdatedPropertyDetails[];
    extendedProperties?: UpdatedExtendedPropertyDetails[];
    relatedProperties?: any[];
}
export interface UpdatedPropertyDetails {
    propertyName: string;
    value: string;
}
export interface UpdatedExtendedPropertyDetails {
    tableName: string;
    properties: UpdatedPropertyDetails[];
}
export interface JobAttachmentUpdatedMessageDetails extends MessageDetails {
    adds?: JobAttachment[];
    updates?: JobAttachment[];
    deletes?: string[];
}
export interface JobCommentMessage {
    jobId: string;
    comment: string;
    commentId: string;
    lastModifiedBy: string;
    lastModified: Date;
}
export interface JobCommentUpdatedMessageDetails extends MessageDetails {
    adds?: JobCommentMessage[];
    updates?: JobCommentMessage[];
    deletes?: string[];
}
export interface MultiStepId extends MessageDetails {
    stepIds: string[];
}
export interface StepInfo extends MultiStepId {
    jobStatus?: string;
    currentSteps?: CurrentStep[];
}
export interface StepStartedInfo extends StepInfo {
    autoRun?: boolean;
}
export declare enum AllowedActions {
    None = 0,
    Cancel = 1,
    Pause = 2,
    Finish = 4,
    Refresh = 8
}
export interface ProgressInfo extends MultiStepId {
    msgCode: string;
    msg: string;
    allowedActions: AllowedActions;
}
export interface StepMessageInfo extends MessageDetails {
    stepId: string;
    msgCode: string;
    msg: string;
    proceed: boolean;
}
export interface MessageInfo extends MultiStepId {
    msgCode: string;
    msg: string;
}
export interface JobStateStep {
    stepId: string;
    assignedTo: string;
    assignedType: AssignedType;
    stepName: string;
    canSkip: boolean;
    message?: NotificationMessage;
}
export interface StepReassignedMessage extends MessageDetails {
    stepId: string;
    assignedType: AssignedType;
    assignedTo?: string;
}
export interface JobStateMessage extends MessageDetails {
    jobStatus: string;
    percentComplete: number;
    jobTemplateName: string;
    diagramId: string;
    diagramVersion: number;
    stepStates: JobStateStep[];
    closed: boolean;
}
export interface StepInfoRequiredMessage extends MessageDetails {
    stepId: string;
    msgCode: string;
    msg: string;
    allowedActions: AllowedActions;
    helpText?: string;
    helpLink?: string;
}
export interface OpenAppStepInfoRequiredMessage extends StepInfoRequiredMessage {
    appUrl: string;
    openInNewBrowser: boolean;
}
export interface DefineLocationStepInfoRequiredMessage extends StepInfoRequiredMessage {
    geometryType: GeometryType;
    prompt: string;
    webMapUrl: string;
    methodType: MethodType;
    zoomToSearchText?: string;
}
export interface QuestionStepInfoRequiredMessage extends StepInfoRequiredMessage, CommentEnabledStep {
    question: string;
    questionResponses: QuestionMessageResponse[];
}
export interface JobPropertiesStepInfoRequiredMessage extends StepInfoRequiredMessage, CommentEnabledStep {
    jobTemplateId: string;
    prompt: string;
    properties: JobPropertyDetails[];
    stepMode?: StepMode;
}
export interface ExecuteGPStepInfoRequiredMessage extends StepInfoRequiredMessage {
    jobTemplateId: string;
    prompt: string;
    visibleParameters: JobPropertyDetails[];
    properties: JobPropertyDetails[];
}
export interface ManualStepInfoRequiredMessage extends StepInfoRequiredMessage, CommentEnabledStep {
    userPrompt?: string;
}
export interface Survey123StepInfoRequiredMessage extends StepInfoRequiredMessage {
    surveyId: string;
    name: string;
    portalType: PortalType;
    portalUrl?: string;
    surveyMode: SurveyMode;
    surveyRecordType: SurveyRecordType;
    relationshipType: ExtendedPropertyTableRelationshipType;
    isExpandedView: boolean;
    globalId: string;
}
export declare enum AttachmentLinkType {
    FILE = "File",
    TEXT = "Text",
    URL = "Url"
}
export interface AttachmentDetails {
    alias?: string;
    attachmentId: string;
    lastModified?: Date;
    uri?: string;
}
export interface AttachmentStepInfoRequiredMessage extends StepInfoRequiredMessage {
    userPrompt: string;
    folder: string;
    acceptEmbedded: boolean;
    acceptLinked: boolean;
    acceptedFileTypes?: string;
    acceptedLinkType?: AttachmentLinkType;
    viewExisting: boolean;
    editExisting: boolean;
    attachments: AttachmentDetails[];
}
export interface AdvancedAssignmentResponse {
    username: string;
    comment?: string;
}
export interface AdvancedAssignmentStepInfo extends BaseStepInfo {
    assignmentResponse: string;
    comment?: string;
}
export interface AdvancedAssignmentStepInfoRequiredMessage extends StepInfoRequiredMessage, CommentEnabledStep {
    userPrompt: string;
    assignmentMethod: AssignmentMethod;
    userDefinedAssignmentOptions?: UserDefinedAssignmentOptions;
    spatialData?: SpatialAssignmentOptions;
}
export declare enum DataType {
    String = "String",
    Integer = "Integer",
    Double = "Double",
    Boolean = "Boolean",
    DateTime = "DateTime",
    Unknown = "Unknown"
}
export interface PropertyDetails {
    identifier: string;
    alias: string;
    required: boolean;
    value: string;
    dataType: DataType;
    order: number;
    fieldLength?: number;
    editable: boolean;
}
export interface JobPropertyDetails extends PropertyDetails {
    domainType?: ExtendedPropertyDomainType;
    uniqueId?: string;
}
export interface PropertyResponse {
    identifier: string;
    value: string;
    uniqueId?: string;
}
export interface QuestionMessageResponse {
    name: string;
    value: number;
}
export interface QuestionResponse {
    value: number;
    comment?: string;
}
export interface BaseStepInfo {
    jobId: string;
    stepId: string;
}
export interface SurveyResponse {
    surveyId: string;
    portalUrl?: string;
    portalType: PortalType;
    surveyMode: SurveyMode;
    surveyRecordType: SurveyRecordType;
    globalId: string;
    success: boolean;
}
export interface SurveyStepInfo extends BaseStepInfo {
    surveyResponse: SurveyResponse;
}
export interface QuestionStepInfo extends BaseStepInfo {
    questionResponse: number;
}
export interface OpenAppStepInfo extends BaseStepInfo {
    openAppResponse: boolean;
    url: string;
}
export interface PropertyStepResponse {
    propertyResponses: PropertyResponse[];
    comment?: string;
}
export interface PropertyStepInfo extends BaseStepInfo {
    propertyResponses: PropertyResponse[];
    comment?: string;
}
export declare enum SubscriptionType {
    Subscribe = "subscribe",
    Unsubscribe = "unsubscribe"
}
export declare enum MessageType {
    StepInfoRequiredError = "StepInfoRequiredError"
}
export interface SubscribeMessage {
    msgType: SubscriptionType;
    jobIds: string[];
}
export interface MessageDetailsWithItemId {
    itemId: string;
}
export interface ExportCompletedMessageDetails extends MessageDetailsWithItemId {
    exportId: string;
}
export interface ExportFailedMessageDetails extends MessageDetailsWithItemId {
    exportId: string;
    msg: string;
    msgCode: string;
}
export interface ImportCompletedMessageDetails extends MessageDetailsWithItemId {
}
export interface ImportFailedMessageDetails extends MessageDetailsWithItemId {
    msg: string;
    msgCode: string;
}
