/**
 * ACTIVE = in operation / ARCHIVED = archived
 */
export const PipelineStatus = {
  "ACTIVE": "ACTIVE",
  "ARCHIVED": "ARCHIVED"
} as const;
export type PipelineStatus = (typeof PipelineStatus)[keyof typeof PipelineStatus];

/**
 * Priority. LOW / MEDIUM / HIGH / URGENT
 */
export const PipelineItemPriority = {
  "LOW": "LOW",
  "MEDIUM": "MEDIUM",
  "HIGH": "HIGH",
  "URGENT": "URGENT"
} as const;
export type PipelineItemPriority = (typeof PipelineItemPriority)[keyof typeof PipelineItemPriority];

/**
 * PipelineItem lifecycle. DRAFT = visible only to the creator and hidden from operational lists, OPEN = published and in progress, CLOSED = explicitly closed. Independent of the PipelineStage category (DONE/CANCELED); transitioning to CLOSED only happens via an explicit ClosePipelineItem call. Approval workflows are not carried on the PipelineItem; the owning domain holds them as needed.
 */
export const PipelineItemLifecycle = {
  "DRAFT": "DRAFT",
  "OPEN": "OPEN",
  "CLOSED": "CLOSED"
} as const;
export type PipelineItemLifecycle = (typeof PipelineItemLifecycle)[keyof typeof PipelineItemLifecycle];

/**
 * Change category. CONTENT = title/description / FIELD = assignee/priority/dueDate / LIFECYCLE = DRAFT→OPEN→CLOSED / LABEL = label attach/detach
 */
export const PipelineItemChangeChangeType = {
  "CONTENT": "CONTENT",
  "FIELD": "FIELD",
  "LIFECYCLE": "LIFECYCLE",
  "LABEL": "LABEL"
} as const;
export type PipelineItemChangeChangeType = (typeof PipelineItemChangeChangeType)[keyof typeof PipelineItemChangeChangeType];

/**
 * Name of the changed field. TITLE / DESCRIPTION / ASSIGNEE / PRIORITY / DUE_DATE / LIFECYCLE / LABEL
 */
export const PipelineItemChangeFieldName = {
  "TITLE": "TITLE",
  "DESCRIPTION": "DESCRIPTION",
  "ASSIGNEE": "ASSIGNEE",
  "PRIORITY": "PRIORITY",
  "DUE_DATE": "DUE_DATE",
  "LIFECYCLE": "LIFECYCLE",
  "LABEL": "LABEL"
} as const;
export type PipelineItemChangeFieldName = (typeof PipelineItemChangeFieldName)[keyof typeof PipelineItemChangeFieldName];

/**
 * Semantic category of the stage. NOT_STARTED = not yet started, IN_PROGRESS = being worked on, DONE = completed, CANCELED = canceled
 */
export const PipelineStageCategory = {
  "NOT_STARTED": "NOT_STARTED",
  "IN_PROGRESS": "IN_PROGRESS",
  "DONE": "DONE",
  "CANCELED": "CANCELED"
} as const;
export type PipelineStageCategory = (typeof PipelineStageCategory)[keyof typeof PipelineStageCategory];
