/**
 * DESTINATION channel this binding routes to (e.g. SLACK, TEAMS)
 */
export const ChannelRoutingBindingChannelId = {
  "IN_APP": "IN_APP",
  "EMAIL": "EMAIL",
  "SMS": "SMS",
  "PUSH": "PUSH",
  "SLACK": "SLACK",
  "TEAMS": "TEAMS"
} as const;
export type ChannelRoutingBindingChannelId = (typeof ChannelRoutingBindingChannelId)[keyof typeof ChannelRoutingBindingChannelId];

/**
 * Post attempt lifecycle status (PENDING, SENT, FAILED)
 */
export const DestinationDeliveryLogStatus = {
  "PENDING": "PENDING",
  "SENT": "SENT",
  "FAILED": "FAILED"
} as const;
export type DestinationDeliveryLogStatus = (typeof DestinationDeliveryLogStatus)[keyof typeof DestinationDeliveryLogStatus];

/**
 * Resolved inclusion reason (SUBSCRIBED/ASSIGNED/AUTHOR/MENTION). ASSIGNED/MENTION trigger the critical bypass over a preference mute
 */
export const NotificationReason = {
  "SUBSCRIBED": "SUBSCRIBED",
  "ASSIGNED": "ASSIGNED",
  "AUTHOR": "AUTHOR",
  "MENTION": "MENTION"
} as const;
export type NotificationReason = (typeof NotificationReason)[keyof typeof NotificationReason];

/**
 * Linear delivery axis (QUEUED, SENT, DELIVERED, FAILED, BOUNCED)
 */
export const NotificationDeliveryStatus = {
  "QUEUED": "QUEUED",
  "SENT": "SENT",
  "DELIVERED": "DELIVERED",
  "FAILED": "FAILED",
  "BOUNCED": "BOUNCED"
} as const;
export type NotificationDeliveryStatus = (typeof NotificationDeliveryStatus)[keyof typeof NotificationDeliveryStatus];

/**
 * Reserved channel identifier (IN_APP, EMAIL, SMS, PUSH, SLACK, TEAMS)
 */
export const NotificationChannelChannelId = {
  "IN_APP": "IN_APP",
  "EMAIL": "EMAIL",
  "SMS": "SMS",
  "PUSH": "PUSH",
  "SLACK": "SLACK",
  "TEAMS": "TEAMS"
} as const;
export type NotificationChannelChannelId = (typeof NotificationChannelChannelId)[keyof typeof NotificationChannelChannelId];

/**
 * Delivery topology: PERSONAL (per-recipient fan-out) or DESTINATION (one post per ChannelRoutingBinding)
 */
export const NotificationChannelKind = {
  "PERSONAL": "PERSONAL",
  "DESTINATION": "DESTINATION"
} as const;
export type NotificationChannelKind = (typeof NotificationChannelKind)[keyof typeof NotificationChannelKind];

/**
 * Lifecycle event recorded on either the deliveryStatus or engagementStatuses axis
 */
export const NotificationDeliveryAuditEventType = {
  "QUEUED": "QUEUED",
  "SENT": "SENT",
  "DELIVERED": "DELIVERED",
  "SEEN": "SEEN",
  "READ": "READ",
  "ARCHIVED": "ARCHIVED",
  "FAILED": "FAILED",
  "BOUNCED": "BOUNCED",
  "OPENED": "OPENED"
} as const;
export type NotificationDeliveryAuditEventType = (typeof NotificationDeliveryAuditEventType)[keyof typeof NotificationDeliveryAuditEventType];

/**
 * Dispatch lifecycle: PENDING -> DISPATCHED | NO_DELIVERY
 */
export const NotificationEventStatus = {
  "PENDING": "PENDING",
  "DISPATCHED": "DISPATCHED",
  "NO_DELIVERY": "NO_DELIVERY"
} as const;
export type NotificationEventStatus = (typeof NotificationEventStatus)[keyof typeof NotificationEventStatus];

/**
 * Workspace connection lifecycle status (ACTIVE, REVOKED)
 */
export const SlackWorkspaceIntegrationStatus = {
  "REVOKED": "REVOKED",
  "ACTIVE": "ACTIVE"
} as const;
export type SlackWorkspaceIntegrationStatus = (typeof SlackWorkspaceIntegrationStatus)[keyof typeof SlackWorkspaceIntegrationStatus];
