'use strict';

// TODO, semver-major: delete this

var $TypeError = require('es-errors/type');
var $SyntaxError = require('es-errors/syntax');

var isMatchRecord = require('./records/match-record');
var isPropertyDescriptor = require('./records/property-descriptor');
var isIteratorRecord = require('./records/iterator-record');
var isPromiseCapabilityRecord = require('./records/promise-capability-record');
var isAsyncGeneratorRequestRecord = require('./records/async-generator-request-record');
var isRegExpRecord = require('./records/regexp-record');

var predicates = {
	'Property Descriptor': isPropertyDescriptor,
	'Match Record': isMatchRecord,
	'Iterator Record': isIteratorRecord,
	'PromiseCapability Record': isPromiseCapabilityRecord,
	'AsyncGeneratorRequest Record': isAsyncGeneratorRequestRecord,
	'RegExp Record': isRegExpRecord
};

module.exports = function assertRecord(Type, recordType, argumentName, value) {
	var predicate = predicates[recordType];
	if (typeof predicate !== 'function') {
		throw new $SyntaxError('unknown record type: ' + recordType);
	}
	if (!predicate(value)) {
		throw new $TypeError(argumentName + ' must be a ' + recordType);
	}
};