import {
  CallHandler,
  ExecutionContext,
  Injectable,
  NestInterceptor,
} from "@nestjs/common"
import { Observable } from "rxjs"

export const REQUEST_CONTEXT = "_requestContext"

@Injectable()
export class InjectRequestInterceptor implements NestInterceptor {
  constructor(private params: string[]) {}

  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    const request = context.switchToHttp().getRequest()
    const data = {}

    this.params.forEach((param) => {
      if (request.params[param]) {
        data[param] = request.params[param]
      }
    })

    if (Object.keys(data).length > 0) {
      request.body[REQUEST_CONTEXT] = { ...data }
    }

    return next.handle()
  }
}
