import { makeDateMatcher } from './date';
import { makeLiteralMatcher } from './literal';
import { makeNumberMatcher } from './number';
import { makeUserMatcher } from './user';

import { FieldMatcher, RangeEqualQualifier } from './types';

export interface MatcherFactory {
  makeDateMatcher: (dateVal: string, qual: RangeEqualQualifier) => FieldMatcher;
  makeLiteralMatcher: (term: string, fuzz: number, wildcardable: boolean) => FieldMatcher;
  makeNumberMatcher: (term: number, fuzz: number, qual: RangeEqualQualifier) => FieldMatcher;
  makeUserMatcher: (term: string) => FieldMatcher;
}

export const defaultMatcher: MatcherFactory = {
  makeDateMatcher,
  makeLiteralMatcher,
  makeNumberMatcher,
  makeUserMatcher,
};