import { IRequestLogger } from "../../src/lib/logging/IRequestLogger";
import Sinon = require("sinon");
import { RequestLogger } from "../../src/lib/logging/RequestLogger";
import Winston = require("winston");
import Express = require("express");

export class RequestLoggerStub implements IRequestLogger {
  infoStub: Sinon.SinonStub;
  debugStub: Sinon.SinonStub;
  errorStub: Sinon.SinonStub;
  private requestLogger: RequestLogger;

  constructor(enableLogging?: boolean) {
    this.infoStub = Sinon.stub();
    this.debugStub = Sinon.stub();
    this.errorStub = Sinon.stub();
    if (enableLogging)
      this.requestLogger = new RequestLogger(Winston);
  }

  info(req: Express.Request, message: string, ...args: any[]): void {
    if (this.requestLogger)
      this.requestLogger.info(req, message, ...args);
    this.infoStub(req, message, ...args);
  }

  debug(req: Express.Request, message: string, ...args: any[]): void {
    if (this.requestLogger)
      this.requestLogger.info(req, message, ...args);
    this.debugStub(req, message, ...args);
  }

  error(req: Express.Request, message: string, ...args: any[]): void {
    if (this.requestLogger)
      this.requestLogger.info(req, message, ...args);
    this.errorStub(req, message, ...args);
  }
}