// All the languages supported by CodeQL
export enum Language {
  csharp = 'csharp',
  cpp = 'cpp',
  go = 'go',
  java = 'java',
  javascript = 'javascript',
  python = 'python',
}

// Additional names for languages
const LANGUAGE_ALIASES: {[lang: string]: Language} = {
  'c': Language.cpp,
  'c++': Language.cpp,
  'c#': Language.csharp,
  'typescript': Language.javascript,
};

// Translate from user input or GitHub's API names for languages to CodeQL's names for languages
export function parseLanguage(language: string): Language | undefined {
  // Normalise to lower case
  language = language.toLowerCase();

  // See if it's an exact match
  if (language in Language) {
    return language as Language;
  }

  // Check language aliases
  if (language in LANGUAGE_ALIASES) {
    return LANGUAGE_ALIASES[language];
  }

  return undefined;
}


export function isTracedLanguage(language: Language): boolean {
  return ['cpp', 'java', 'csharp'].includes(language);
}

export function isScannedLanguage(language: Language): boolean {
  return !isTracedLanguage(language);
}