export default class Logger {
  // Log message to the console
  public static log(message: string, data: object | null = null): void {
    console.log(`[Log] %c${message}`.trim(), "color: gray", data ?? "");
  }

  // Log warning to the console
  public static warn(message: string, data: object | null = null): void {
    console.warn(`%c${message}`.trim(), data ?? "");
  }

  // Log error to the console
  public static error(message: string, data: object | null = null): void {
    console.error(`%c${message}`.trim(), data ?? "");
  }

  // Log message received from the websocket to the console
  public static wsReceived(data: object, message: string | undefined = undefined): void {
    console.log(`%c[WS Recieved] ${message ?? ""}`.trim(), "color: #8258c7", data);
  }

  // Log message sent to the websocket to the console
  public static wsSent(data: object, message: string | undefined = undefined): void {
    console.log(`%c[WS Sent] ${message ?? ""}`.trim(), "color: #4eb570", data);
  }

  // Log message to the console with a timestamp
  public static ts(message: string, data: object | null = null): void {
    console.log(`%c[TS] ${message}`.trim(), "color: #2e6bc7", data ?? "");
  }
}
