'use strict';

module.exports = defFunc;

var definition = defFunc.definition = {
  type: 'number',
  macro: function (schema, parentSchema) {
    var min = schema[0]
      , max = schema[1]
      , exclusive = parentSchema.exclusiveRange;

    validateRangeSchema(min, max, exclusive);

    return {
      minimum: min,
      exclusiveMinimum: exclusive,
      maximum: max,
      exclusiveMaximum: exclusive
    };
  },
  metaSchema: {
    type: 'array',
    minItems: 2,
    maxItems: 2,
    items: { type: 'number' }
  }
};

function defFunc(ajv) {
  ajv.addKeyword('range', definition);
  ajv.addKeyword('exclusiveRange');
}

function validateRangeSchema(min, max, exclusive) {
  if (exclusive !== undefined && typeof exclusive != 'boolean')
    throw new Error('Invalid schema for exclusiveRange keyword, should be boolean');

  if (min > max || (exclusive && min == max))
    throw new Error('There are no numbers in range');
}
