// What a decoding program is CALLED, as against what it calls itself.
//
// Every WSJT-X-family packet carries an "id" naming the sending program, and
// OpsLog shows it wherever a receiver has to be told apart from another. Most
// of them send the name on the box: "WSJT-X", "JTDX", "MSHV".
//
// Nexus does not. It announces itself as "Tempo" — the name of the engine
// inside it — so an operator running Nexus saw a program on their screen they
// have never heard of, and had to work out that it was theirs.
//
// Only the LABEL is translated. The id stays the routing key everywhere else:
// a Reply, a Halt and the auto-call's own bookkeeping are matched against what
// the program sent, and renaming that would send them to nobody.
const NAMES: Record<string, string> = {
  TEMPO: 'Nexus',
};

export function decoderName(id?: string): string {
  const raw = (id ?? '').trim();
  if (!raw) return '';
  // Matched on the leading word: some programs append a version or an instance
  // number ("WSJT-X - 2", "Tempo 1.4"), and the name is the part before it.
  const head = raw.split(/[\s\-–—]+/)[0].toUpperCase();
  return NAMES[head] ?? raw;
}
