import { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from '@nestjs/common'
import { isISO8601 } from 'class-validator'

@Injectable()
export class ParseDatePipe implements PipeTransform {
	transform(value: string | undefined, metadata: ArgumentMetadata): Date | undefined {
		if (!value) return undefined

		// Special case of openapi date parsing to remove double quotes, e.g from '"2025-06-13T11:53:53.601Z"'
		const dateString = value.replace(/^"(.*)"$/, '$1')

		if (!isISO8601(dateString)) {
			throw new BadRequestException(`Date '${metadata.data}' is not valid`)
		} else if (value) return new Date(dateString)
	}
}
