const allNames: string[] = [];

for (let c1 = 0; c1 < 26; c1++) {
  const letter1 = String.fromCharCode(c1 + 65);
  for (let c2 = 0; c2 < 26; c2++) {
    const letter2 = String.fromCharCode(c2 + 65);
    for (let n1 = 0; n1 < 10; n1++) {
      const number1 = String(n1);
      for (let n2 = 0; n2 < 10; n2++) {
        const number2 = String(n2);
        for (let n3 = 0; n3 < 10; n3++) {
          const number3 = String(n3);
          allNames.push(`${letter2}${letter1}${number1}${number2}${number3}`);
        }
      }
    }
  }
}

let possibleNames = [...allNames];

const generateName = (): string => {
  const index = Math.floor(Math.random() * possibleNames.length);
  const name = possibleNames[index];
  possibleNames.splice(index, 1);
  return name;
};

export class Robot {
  private _name = "";

  constructor() {
    this.resetName();
  }

  public get name(): string {
    return this._name;
  }

  public resetName(): void {
    this._name = generateName();
  }

  public static releaseNames(): void {
    possibleNames = [...allNames];
  }
}
