import ansis from "ansis";

class AioTestsLogger {
  private debugMode: boolean;

  constructor() {
    this.debugMode = false;
  }

  setDebugMode(_debugMode: boolean): void {
    this.debugMode = _debugMode;
  }

  log(text: string): void {
    console.log(
      (this.debugMode ? new Date().toLocaleTimeString() + " : " : "") + text
    );
  }

  error(text: string, addReporter?: boolean): void {
    if (addReporter) {
      console.log(ansis.hex("#0094a6").underline.bold("AIO Tests Reporter :"));
    }
    console.error(
      " - " +
        ansis.red(
          (this.debugMode ? new Date().toLocaleTimeString() + " : " : "") + text
        )
    );
  }

  errorObj(error: unknown, addReporter?: boolean): void {
    if (addReporter) {
      console.log(ansis.hex("#0094a6").underline.bold("AIO Tests Reporter :"));
    }
    console.error(error);
  }

  logStartEnd(text: string): void {
    const repeatStr = "*".repeat(15);
    console.log(
      ansis
        .hex("#0094a6")
        .bold(`${repeatStr} AIO Tests Reporter : ${text} ${repeatStr}`)
    );
  }

  debug(text: string): void {
    if (this.debugMode) {
      console.log(
        (this.debugMode ? new Date().toLocaleTimeString() + " : " : "") + text
      );
    }
  }
}

export default new AioTestsLogger();
