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

export function makeNumberMatcher(term: number, fuzz: number, qual: RangeEqualQualifier): FieldMatcher {
  // Range matching.
  return v => {
    const attrVal = parseFloat(v);

    if (isNaN(attrVal)) {
      return false;
    }

    if (fuzz !== 0) {
      return term - fuzz <= attrVal && term + fuzz >= attrVal;
    }

    switch (qual) {
      case 'lt':
        return attrVal < term;
      case 'gt':
        return attrVal > term;
      case 'lte':
        return attrVal <= term;
      case 'gte':
        return attrVal >= term;
      case 'eq':
      default:
        return attrVal === term;
    }
  };
}