var logger = require('pelias-logger').get('api');
var _ = require('lodash');

// these are subjective terms, but wanted to add shortcuts to denote something
//  about importance
var SCORES = {
  EXACT: 1.0,
  EXCELLENT: 0.9,
  GOOD: 0.8,
  OKAY: 0.7,
  POOR: 0.6,
  NONE: 0.5,
  INVALID: 0.0
};

var BUCKETS = {
  _1_METER: 1,
  _10_METERS: 10,
  _100_METERS: 100,
  _250_METERS: 250,
  _1_KILOMETER: 1000
};

function setup() {
  return computeScores;
}

function computeScores(req, res, next) {
  // do nothing if no result data set
  if (!res.data || !res.data) {
    return next();
  }

  // loop through data items and determine confidence scores
  res.data = res.data.map(computeConfidenceScore);

  next();
}

function computeConfidenceScore(hit) {
  // non-number or invalid distance should be given confidence 0.0
  if (!_.isFinite(hit.distance) || hit.distance < 0) {
    hit.confidence = SCORES.INVALID;
    return hit;
  }

  var distance = hit.distance * 1000.0;

  // figure out which range the distance lies in and assign confidence accordingly
  if (distance < BUCKETS._1_METER) {
    hit.confidence = SCORES.EXACT;
  } else if (distance < BUCKETS._10_METERS) {
    hit.confidence = SCORES.EXCELLENT;
  } else if (distance < BUCKETS._100_METERS) {
    hit.confidence = SCORES.GOOD;
  } else if (distance < BUCKETS._250_METERS) {
    hit.confidence = SCORES.OKAY;
  } else if (distance < BUCKETS._1_KILOMETER) {
    hit.confidence = SCORES.POOR;
  } else {
    hit.confidence = SCORES.NONE;
  }

  return hit;

}

module.exports = setup;