// Ignore https://angular.io/guide/angular-compiler-options#strictmetadataemit
// @dynamic
export class Utils {
  static MAX_UID = 1000000;

  public static isUndefinedOrNull(value: any): boolean {
    return typeof value === 'undefined' || value === null;
  }

  public static normalizeString(text: string) {
    return text.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
  }

  public static normalizeAndSearchInText(text: string, search: string): boolean {
    if(Utils.isUndefinedOrNull(text) || Utils.isUndefinedOrNull(search)) {
      return false;
    }
    const normalizedText = Utils.normalizeString(text);
    let normalizedSearch = Utils.normalizeString(search)?.replace(/\(|\)|\\/gi, '');
    const regExp = new RegExp(normalizedSearch, 'gi');
    return normalizedText.search(regExp) !== -1;
  }

  public static getUID(prefix: string): string {
    do {
      // eslint-disable-next-line no-bitwise
      prefix += ~~(Math.random() * Utils.MAX_UID); // "~~" acts like a faster Math.floor() here
    } while (document.getElementById(prefix));
    return prefix;
  }
}
