/**
 * @param {string} ransomNote
 * @param {string} magazine
 * @return {boolean}
 */
const canConstruct = (ransomNote, magazine) => {
  let ransomNoteMap = new Map(), magazineMap = new Map();
  for (let i = 0; i < ransomNote.length; i++) {
    ransomNoteMap.set(ransomNote[i], (ransomNoteMap.get(ransomNote[i]) || 0) + 1);
  }

  for (let i = 0; i < magazine.length; i++) {
    magazineMap.set(magazine[i], (magazineMap.get(magazine[i]) || 0) + 1);
  }

  console.log("ransomNoteMap")
  console.log(ransomNoteMap)
  console.log("magazineMap")
  console.log(magazineMap)

  // for (let [key, value] of ransomNoteMap) {
  //   if (magazineMap.has(key)) {
  //     ransomNoteMap.set(key, value - 1);
  //     // && magazineMap.get(key) === value
  //     // return true;
  //   }
  //   console.log(ransomNoteMap)
  // }

  for (let i = 0; i < ransomNote.length; i++) {
    if (magazineMap.has(ransomNote[i]) && magazineMap.get(ransomNote[i]) > 0) {
      magazineMap.set(ransomNote[i], magazineMap.get(ransomNote[i]) - 1)
    } else {
      return false;
    }
  }

  console.log("ransomNoteMap")
  console.log(ransomNoteMap)
  console.log("magazineMap")
  console.log(magazineMap)

  return true;
};

let x = null;
x = canConstruct("bg", "efjbdfbdgfjhhaiigfhbaejahgfbbgbjagbddfgdiaigdadhcfcj");
x = canConstruct("aa", "ab");
x = canConstruct("aa", "aab");
console.log("Result")
console.log(x)