// ==UserScript==
// @name     DisplayAWSAccountAlias
// @version  1
// @grant    none
// @match https://*.console.aws.amazon.com/*
// ==/UserScript==

// Replace with your account numbers and desired alias
// The key is the account number and the value is the alias to display
const accountAliases = {
  'ACCOUNT_NUMBER': 'ALIAS',
  '123412341234': '123412341234 - Production',
  '123312331233': '123312331233 - Development',
  '400050006000': '400060006000 - Audit',
  '987698769876': '987698769876 - Sandbox',
  '452845284528': '452845284528 - Shared'
}

function scrapeAccountNumber (node) {  
  for(const child of node.childNodes) {
    const result = scrapeAccountNumber(child)   
    
    if(result) return result
    
    const accountNumber = child.innerHTML?.match(/([0-9]+-[0-9]+-[0-9]+)/g)
   
    if(accountNumber && accountNumber.length) return accountNumber[0].replace(/-/g, '')
  }
  
  return
}
    
const accountNumber = scrapeAccountNumber(document.querySelector('[data-testid="account-detail-menu"]'))

if(accountNumber && accountAliases[accountNumber]) {
  const styleClasses = document.querySelector('[data-testid="more-menu__awsc-nav-regions-menu-button"]').classList
  const topBarList = document.getElementById('awsc-navigation__more-menu--list')
  const newTopBarListItem = topBarList.firstChild.cloneNode() 
  const newTopBarListItemTextDiv = document.createElement('div')
  
  newTopBarListItemTextDiv.classList.add(styleClasses[0]) 
  newTopBarListItem.appendChild(document.createTextNode(accountAliases[accountNumber]))  
  newTopBarListItemTextDiv.appendChild(newTopBarListItem)
  topBarList.prepend(newTopBarListItemTextDiv)
}