import { OFFER_FRESHNESS_MS, type Offer, type OfferCache } from "./types.js";

/** In-memory cache for standalone runtimes and browser harnesses. */
export class MemoryResponseCache implements OfferCache {
  private readonly entries = new Map<string, { offers: Offer[]; observedAt: number }>();

  constructor(private readonly ttlMs = OFFER_FRESHNESS_MS) {}

  getEntry(store: string, canonical: string): { offers: Offer[]; observedAt: number } | null {
    const key = `${store}\0${canonical}`;
    const entry = this.entries.get(key);
    if (!entry) return null;
    if (Date.now() - entry.observedAt > this.ttlMs) {
      this.entries.delete(key);
      return null;
    }
    return entry;
  }

  set(store: string, canonical: string, offers: Offer[], observedAt = Date.now()): void {
    this.entries.set(`${store}\0${canonical}`, { offers, observedAt });
  }
}
