/**
 * There's a list of file, since two files cannot have equal names,
 * the one which comes later will have a suffix (k),
 * where k is the smallest integer such that the found name is not used yet.
 *
 * Return an array of names that will be given to the files.
 *
 * @param {Array} names
 * @return {Array}
 *
 * @example
 * For input ["file", "file", "image", "file(1)", "file"],
 * the output should be ["file", "file(1)", "image", "file(1)(1)", "file(2)"]
 *
 */
function renameFiles(names) {
  const namesMap = new Map();
  const namesArr = names.map((item) => {
    if (namesMap.has(item)) {
      const sameNameCounter = namesMap.get(item);
      const newName = `${item}(${sameNameCounter})`;
      namesMap.set(newName, 1);
      namesMap.set(item, sameNameCounter + 1);
      return newName;
    }
    namesMap.set(item, 1);
    return item;
  });

  return namesArr;
}

module.exports = renameFiles;
