// src/pipes/validation.pipe.ts
import {
  PipeTransform,
  Injectable,
  ArgumentMetadata,
  BadRequestException,
  ArgumentsHost,
  HttpException,
  HttpStatus
} from '@nestjs/common';
import { validate } from 'class-validator';
import { plainToClass } from 'class-transformer';

@Injectable()
export class ValidationPipe implements PipeTransform<any> {

  async transform(value: any, metadata: ArgumentMetadata) {

    const { metatype } = metadata;
    if (!metatype || !this.toValidate(metatype)) {//
      return value;
    }

    const object = plainToClass(metatype, value);

    const errors = await validate(object);//

    if (errors.length > 0) {
      // return {
      //   status: 0,
      //   message: Object.values(errors[0].constraints)[0],
      // };
      console.log(errors);
      const message = errors[0]?.constraints || errors[0]?.children[0]?.children[0]?.constraints
      throw new HttpException(Object.values(message || {})[0], HttpStatus.BAD_REQUEST)
    }
    return value;
    // return {
    //   status: 1,
    //   message: '',
    // };
  }

  private toValidate(metatype: Function): boolean {
    // const types = [String, Boolean, Number, Array, Object];
    // return !types.includes(metatype);
    return true;
  }
}
