import type { KVNamespace } from '@cloudflare/workers-types'
import type { CacheBackend } from './index.js'

/**
 * Cloudflare KV adapter. TTL is whole seconds via `expirationTtl`.
 * CF KV enforces a 60-second minimum TTL — values below that surface CF's own
 * error; this adapter does not silently clamp.
 */
export function createKvBackend(kv: KVNamespace): CacheBackend {
  return {
    async get(key) {
      const value = await kv.get(key)
      return value ?? undefined
    },

    async set(key, value, ttlSeconds) {
      if (ttlSeconds !== undefined) {
        await kv.put(key, value, { expirationTtl: ttlSeconds })
        return
      }
      await kv.put(key, value)
    },

    async del(key) {
      await kv.delete(key)
    },
  }
}
