"use strict";
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
let devModeConfig = {
  enabled: true,
  collectionSizeThreshold: 1e3,
  slowQueryThresholdMs: 10,
  onSuggestion: null
};
const queryPatterns = /* @__PURE__ */ new Map();
function configureIndexDevMode(config) {
  devModeConfig = { ...devModeConfig, ...config };
}
function getIndexDevModeConfig() {
  return devModeConfig;
}
function isDevModeEnabled() {
  return devModeConfig.enabled && process.env.NODE_ENV !== `production`;
}
function emitIndexSuggestion(suggestion) {
  if (!isDevModeEnabled()) return;
  if (devModeConfig.onSuggestion) {
    try {
      devModeConfig.onSuggestion(suggestion);
    } catch {
    }
  } else {
    console.warn(
      `[TanStack DB] Index suggestion for "${suggestion.collectionId}":
  ${suggestion.message}
  Field: ${suggestion.fieldPath.join(`.`)}
  Add index: collection.createIndex((row) => row.${suggestion.fieldPath.join(`.`)})`
    );
  }
}
function trackQuery(collectionId, fieldPath, executionTimeMs) {
  if (!isDevModeEnabled()) return;
  const key = `${collectionId}:${fieldPath.join(`.`)}`;
  const existing = queryPatterns.get(key);
  if (existing) {
    existing.queryCount++;
    existing.totalTimeMs += executionTimeMs;
    existing.avgTimeMs = existing.totalTimeMs / existing.queryCount;
  } else {
    queryPatterns.set(key, {
      fieldPath,
      queryCount: 1,
      totalTimeMs: executionTimeMs,
      avgTimeMs: executionTimeMs
    });
  }
  const pattern = queryPatterns.get(key);
  if (pattern.avgTimeMs > devModeConfig.slowQueryThresholdMs) {
    emitIndexSuggestion({
      type: `slow-query`,
      collectionId,
      fieldPath,
      message: `Queries on "${fieldPath.join(`.`)}" are slow (avg ${pattern.avgTimeMs.toFixed(1)}ms). Consider adding an index.`,
      queryTimeMs: pattern.avgTimeMs,
      queryCount: pattern.queryCount
    });
  }
}
function checkCollectionSizeForIndex(collectionId, collectionSize, fieldPath) {
  if (!isDevModeEnabled()) return;
  if (collectionSize > devModeConfig.collectionSizeThreshold) {
    emitIndexSuggestion({
      type: `collection-size`,
      collectionId,
      fieldPath,
      message: `Collection has ${collectionSize} items. Queries on "${fieldPath.join(`.`)}" may benefit from an index.`,
      collectionSize
    });
  }
}
function clearQueryPatterns() {
  queryPatterns.clear();
}
function getQueryPatterns() {
  return new Map(queryPatterns);
}
exports.checkCollectionSizeForIndex = checkCollectionSizeForIndex;
exports.clearQueryPatterns = clearQueryPatterns;
exports.configureIndexDevMode = configureIndexDevMode;
exports.emitIndexSuggestion = emitIndexSuggestion;
exports.getIndexDevModeConfig = getIndexDevModeConfig;
exports.getQueryPatterns = getQueryPatterns;
exports.isDevModeEnabled = isDevModeEnabled;
exports.trackQuery = trackQuery;
//# sourceMappingURL=index-registry.cjs.map
