import {
  Injectable,
  CanActivate,
  ExecutionContext,
  Inject,
} from "@nestjs/common";
import { Observable } from "rxjs";
import { Request } from "express";
import { MODULE_OPTIONS_TOKEN } from "./health.module";
import { HealthModuleOptions } from "./health.module";

@Injectable()
export class HealthAuthGuard implements CanActivate {
  constructor(
    @Inject(MODULE_OPTIONS_TOKEN) private options: HealthModuleOptions,
  ) {}

  canActivate(
    context: ExecutionContext,
  ): boolean | Promise<boolean> | Observable<boolean> {
    if (!this.options.passwordProtected) {
      return true;
    }
    const request = context.switchToHttp().getRequest<Request>();
    const authParam = request.query.authKey;
    if (!authParam) {
      return false;
    }
    return authParam === this.options.password;
  }
}
