import {
  CallHandler,
  ExecutionContext,
  Injectable,
  NestInterceptor,
} from '@nestjs/common';
import { instanceToPlain } from 'class-transformer';
import { Observable, map } from 'rxjs';
import { CLIENT_SUCCESS } from '../constants/client.constant';

/**
 * 정상응답 시 API 응답 포맷을 통일시키는 인터셉터
 */
@Injectable()
export class ClientResponseInterceptor implements NestInterceptor {
  intercept(
    context: ExecutionContext,
    next: CallHandler<any>,
  ): Observable<any> | Promise<Observable<any>> {
    return next.handle().pipe(
      map((data) => {
        const responseData = instanceToPlain(data) || undefined;
        // timeout(5000);
        return {
          ...CLIENT_SUCCESS,
          ...responseData,
        };
      }),
    );
  }
}
