import { Temporal } from "@js-temporal/polyfill";
import { URLPattern } from "urlpattern-polyfill";
import { KvKey, KvStore, KvStoreSetOptions } from "../kv-DRaeSXco.js";
import { MessageQueue, MessageQueueEnqueueOptions, MessageQueueListenOptions } from "../mq-DYKDDJmp.js";
import { KVNamespace, Queue } from "@cloudflare/workers-types/experimental";

//#region x/cfworkers.d.ts

/**
 * Implementation of the {@link KvStore} interface for Cloudflare Workers KV
 * binding.  This class provides a wrapper around Cloudflare's KV namespace to
 * store and retrieve JSON-serializable values using structured keys.
 * @since 1.6.0
 */
declare class WorkersKvStore implements KvStore {
  #private;
  constructor(namespace: KVNamespace<string>);
  get<T = unknown>(key: KvKey): Promise<T | undefined>;
  set(key: KvKey, value: unknown, options?: KvStoreSetOptions): Promise<void>;
  delete(key: KvKey): Promise<void>;
}
/**
 * Implementation of the {@link MessageQueue} interface for Cloudflare
 * Workers Queues binding.  This class provides a wrapper around Cloudflare's
 * Queues to send messages to a queue.
 *
 * Note that this implementation does not support the `listen()` method,
 * as Cloudflare Workers Queues do not support message consumption in the same
 * way as other message queue systems.  Instead, you should use
 * the {@link Federation.processQueuedTask} method to process messages
 * passed to the queue.
 * @since 1.6.0
 */
declare class WorkersMessageQueue implements MessageQueue {
  #private;
  /**
   * Cloudflare Queues provide automatic retry with exponential backoff
   * and Dead Letter Queues.
   * @since 1.7.0
   */
  readonly nativeRetrial = true;
  constructor(queue: Queue);
  enqueue(message: any, options?: MessageQueueEnqueueOptions): Promise<void>;
  enqueueMany(messages: any[], options?: MessageQueueEnqueueOptions): Promise<void>;
  listen(_handler: (message: any) => Promise<void> | void, _options?: MessageQueueListenOptions): Promise<void>;
}
//#endregion
export { WorkersKvStore, WorkersMessageQueue };