/**
 * Core Enums
 * 
 * Shared enums for notification lifecycle, delivery outcomes,
 * recovery reasons, and other cross-platform constants.
 * 
 * @author Matthew Raymer
 * @version 1.0.0
 */

/**
 * Permission state enum
 * 
 * Represents the state of notification permissions across platforms
 */
export enum PermissionState {
  PROMPT = 'prompt',
  PROMPT_WITH_RATIONALE = 'prompt-with-rationale',
  GRANTED = 'granted',
  DENIED = 'denied',
  PROVISIONAL = 'provisional',
  EPHEMERAL = 'ephemeral',
  UNKNOWN = 'unknown',
}

/**
 * Notification priority levels
 * 
 * Standard priority values for notifications
 */
export enum NotificationPriority {
  MIN = 'min',
  LOW = 'low',
  DEFAULT = 'default',
  NORMAL = 'normal',
  HIGH = 'high',
  MAX = 'max',
}

/**
 * Schedule kind
 * 
 * Type of schedule (fetch for content fetching, notify for notifications)
 */
export enum ScheduleKind {
  FETCH = 'fetch',
  NOTIFY = 'notify',
}

/**
 * History execution kind
 * 
 * Type of execution recorded in history
 */
export enum HistoryKind {
  FETCH = 'fetch',
  NOTIFY = 'notify',
  CALLBACK = 'callback',
  BOOT_RECOVERY = 'boot_recovery',
}

/**
 * History outcome
 * 
 * Result of an execution recorded in history
 */
export enum HistoryOutcome {
  SUCCESS = 'success',
  FAILURE = 'failure',
  SKIPPED_TTL = 'skipped_ttl',
  CIRCUIT_OPEN = 'circuit_open',
}

/**
 * Callback kind
 * 
 * Type of callback configuration
 */
export enum CallbackKind {
  HTTP = 'http',
  LOCAL = 'local',
  QUEUE = 'queue',
}

/**
 * Config data type
 * 
 * Data type for configuration values
 */
export enum ConfigDataType {
  STRING = 'string',
  BOOLEAN = 'boolean',
  INTEGER = 'integer',
  LONG = 'long',
  FLOAT = 'float',
  DOUBLE = 'double',
  JSON = 'json',
}

/**
 * Cache eviction policy
 * 
 * Policy for cache entry eviction
 */
export enum CacheEvictionPolicy {
  LRU = 'LRU',
  FIFO = 'FIFO',
  TTL = 'TTL',
}

