
/**
 * Адаптирует объект к другому виду, путем замены ключей, может заменять значения через callback
 * @param targetObject - целевой объект
 * @param config - конфигурация конвертации
 * @param callback - коллбек для дополнительной обработки
 */
const convertObject = (targetObject={}, {config = {}, callback = (v: any, _v: any) => v}) => {
  const newObject = {}
  for (const key in config) {
    // @ts-ignore
    newObject[config[key]] = targetObject[key]
  }
  return callback(newObject, targetObject)
}

/**
 * Имплементация метода convertObject для массива объектов
 * @param targetList
 * @param config
 * @param callback
 */
const convertList = (targetList: Array<Object>, {config = {}, callback = (v: any, _v: any) => v}) => {
  return targetList.map((targetObject) => convertObject(targetObject, {config, callback}))
}

const Adapter = {
  convertList,
  convertObject
}

export default Adapter
