import {
  registerDecorator,
  ValidationArguments,
  ValidationOptions,
} from 'class-validator';

export function IsDateRangeEnd(
  startProperty: string,
  options?: ValidationOptions,
) {
  return (object: object, propertyName: string) => {
    registerDecorator({
      name: 'IsDateRangeEnd',
      target: object.constructor,
      propertyName,
      constraints: [startProperty],
      options,
      validator: {
        validate(value: unknown, args: ValidationArguments) {
          const constraints = Array.isArray(args.constraints)
            ? (args.constraints as unknown[])
            : [];
          const constraint = constraints[0];
          const startProp = typeof constraint === 'string' ? constraint : '';

          if (startProp.length === 0) {
            return true;
          }

          const startValue = (args.object as Record<string, unknown>)[
            startProp
          ];

          if (typeof value !== 'string' || typeof startValue !== 'string') {
            return true;
          }

          return startValue <= value;
        },
      },
    });
  };
}
