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,
};