import { FeatureServiceProperties } from './extendedPropertyDefinition';
import Geometry from '@arcgis/core/geometry/Geometry';
export declare enum AssignedType {
    Unassigned = "Unassigned",
    Group = "Group",
    User = "User"
}
export interface Job {
    jobId: string;
    jobName?: string;
    ownedBy?: string;
    createdBy?: string;
    notes?: string;
    description?: string;
    createdDate?: Date;
    startDate?: Date;
    startedDate?: Date;
    dueDate?: Date;
    endDate?: Date;
    parentJob?: string;
    percentComplete: number;
    priority: string;
    diagramId?: string;
    diagramVersion?: number;
    diagramName?: string;
    closed: boolean;
    closedBy?: string;
    currentSteps: CurrentStep[];
    jobStatus: string;
    jobTemplateId: string;
    jobTemplateName: string;
    activeVersions: JobVersion[];
    holds?: JobHold[];
    extendedProperties?: JobExtendedPropertyTable[];
    relatedProperties?: JobRelatedPropertyTable[];
    archived?: boolean;
}
export interface CurrentStep {
    stepId?: string;
    assignedTo?: string;
    assignedType: AssignedType;
    stepName?: string;
    canSkip?: boolean;
    manualHold?: boolean;
    dependencies?: boolean;
    holdScheduledRelease?: Date;
}
export interface JobExtendedProperty {
    propertyName: string;
    value?: any;
}
export interface JobExtendedPropertyTable {
    tableName: string;
    properties: Array<JobExtendedProperty>;
    featureServiceProperties?: FeatureServiceProperties;
}
export interface JobRelatedPropertyEntry {
    createdDate: Date;
    id: string;
    properties: Array<JobExtendedProperty>;
}
export interface JobRelatedPropertyTable {
    entries: Array<JobRelatedPropertyEntry>;
    featureServiceProperties?: FeatureServiceProperties;
    tableName: string;
}
export interface JobRelatedPropertyUpdateEntry {
    id?: string;
    properties: Array<JobExtendedProperty>;
}
export interface JobRelatedPropertyUpdateTable {
    entries: Array<JobRelatedPropertyUpdateEntry>;
    featureServiceProperties?: FeatureServiceProperties;
    tableName: string;
}
export interface JobRelatedPropertyDeleteFromTable {
    tableName: string;
    ids: string[];
}
export interface ExtendedProperty {
    identifier: string;
    value?: string;
}
export interface RelatedProperty {
    propertyName: string;
    value: string;
}
export interface RelatedPropertyEdits {
    adds?: Array<JobRelatedPropertyUpdateTable>;
    updates?: Array<JobRelatedPropertyUpdateTable>;
    deletes?: Array<JobRelatedPropertyDeleteFromTable>;
}
interface JobOverrides {
    jobName?: string;
    startDate?: Date;
    dueDate?: Date;
    priority?: string;
    description?: string;
    ownedBy?: string;
    percentComplete?: number;
    notes?: string;
    parentJob?: string;
    extendedProperties?: Array<ExtendedProperty>;
}
export interface JobRequestOptions {
    extProps?: boolean;
    holds?: boolean;
}
export interface CreateJobOverrides extends JobOverrides {
    numberOfJobs?: number;
    assignedType?: AssignedType;
    assignedTo?: string;
    location?: Geometry;
    relatedProperties?: Array<JobRelatedPropertyAdd>;
}
export interface JobRelatedPropertyAdd {
    tableName: string;
    entries: Array<JobRelatedPropertyAddEntry>;
}
export interface JobRelatedPropertyAddEntry {
    properties: Array<RelatedProperty>;
}
export interface CreateJobsResponse {
    jobIds: string[];
    autoExecuted: boolean;
}
export interface UpdateJobOverrides extends JobOverrides {
    jobStatus?: string;
    relatedProperties?: RelatedPropertyEdits;
}
export interface JobVersion {
    name: string;
    url: string;
    layerItemId: string;
    versionId: string;
}
export interface JobAttachment {
    id: string;
    lastModifiedBy?: string;
    lastModified?: Date;
    alias?: string;
    folder?: string;
    url?: string;
}
export interface JobAttachmentDetails {
    jobId: string;
    attachmentId?: string;
    attachment?: any;
    alias?: string;
    folder?: string;
    url?: string;
    stepId?: string;
}
export interface AddJobAttachmentResponse {
    attachmentId: string;
    alias: string;
    url: string;
}
export interface JobComment {
    jobId: string;
    comment: string;
    commentId: string;
    lastModifiedBy: string;
    lastModified: Date;
}
export interface JobHold {
    jobId: string;
    stepId: string;
    holdId: string;
    setBy: string;
    setDate: Date;
    scheduledRelease?: Date;
    releasedBy?: string;
    releasedDate?: Date;
    dependentJobId?: string;
    dependentStepId?: string;
}
export interface JobHoldDetails {
    jobId: string;
    stepIds: Array<string>;
    scheduledRelease?: Date;
}
export interface JobDependencyDetails {
    jobId: string;
    stepIds: string[];
    dependentJobId: string;
    dependentStepId?: string;
}
export {};
