import Fuse from 'fuse.js';

export interface FuseSearchOptions {
  keys: string[];
  threshold?: number;
  distance?: number;
  minMatchCharLength?: number;
  isCaseSensitive?: boolean;
  limit?: number;
}

export function fuseSearch<T = any>(
  data: T[],
  searchTerm: string,
  options: FuseSearchOptions
): { results: T[]; totalResults: number } {
  const fuse = new Fuse(data, {
    keys: options.keys,
    threshold: options.threshold ?? 0.6,
    distance: options.distance ?? 100,
    minMatchCharLength: options.minMatchCharLength ?? 1,
    isCaseSensitive: options.isCaseSensitive ?? false,
  });
  const searchResults = fuse.search(searchTerm);
  const limitedResults = options.limit ? searchResults.slice(0, options.limit) : searchResults;
  return {
    results: limitedResults.map(r => r.item),
    totalResults: searchResults.length,
  };
} 