private ValidationResult Validate()

in Blueprints/BlueprintDefinitions/vs2022/LexBookTripSample/template/src/BlueprintBaseName.1/BookCarIntentProcessor.cs [221:293]


    private ValidationResult Validate(Reservation reservation)
    {
        if (!string.IsNullOrEmpty(reservation.PickUpCity) && !TypeValidators.IsValidCity(reservation.PickUpCity))
        {
            return new ValidationResult(false, PICK_UP_CITY_SLOT,
                $"We currently do not support {reservation.PickUpCity} as a valid destination.  Can you try a different city?");
        }

        DateTime pickupDate = DateTime.MinValue;
        if (!string.IsNullOrEmpty(reservation.PickUpDate))
        {
            if (!DateTime.TryParse(reservation.PickUpDate, out pickupDate))
            {
                return new ValidationResult(false, PICK_UP_DATE_SLOT,
                    "I did not understand your departure date.  When would you like to pick up your car rental?");
            }
            if (pickupDate < DateTime.Today)
            {
                return new ValidationResult(false, PICK_UP_DATE_SLOT,
                    "Your pick up date is in the past!  Can you try a different date?");
            }
        }

        DateTime returnDate = DateTime.MinValue;
        if (!string.IsNullOrEmpty(reservation.ReturnDate))
        {
            if (!DateTime.TryParse(reservation.ReturnDate, out returnDate))
            {
                return new ValidationResult(false, RETURN_DATE_SLOT,
                    "I did not understand your return date.  When would you like to return your car rental?");
            }
        }

        if (pickupDate != DateTime.MinValue && returnDate != DateTime.MinValue)
        {
            if (returnDate <= pickupDate)
            {
                return new ValidationResult(false, RETURN_DATE_SLOT,
                    "Your return date must be after your pick up date.  Can you try a different return date?");
            }

            var ts = returnDate.Date - pickupDate.Date;
            if (ts.Days > 30)
            {
                return new ValidationResult(false, RETURN_DATE_SLOT,
                    "You can reserve a car for up to thirty days.  Can you try a different return date?");
            }
        }

        int age = 0;
        if (!string.IsNullOrEmpty(reservation.DriverAge))
        {
            if (!int.TryParse(reservation.DriverAge, out age))
            {
                return new ValidationResult(false, DRIVER_AGE_SLOT,
                    "I did not understand the driver's age.  Can you enter the driver's age again?");
            }
            if (age < 18)
            {
                return new ValidationResult(false, DRIVER_AGE_SLOT,
                    "Your driver must be at least eighteen to rent a car.  Can you provide the age of a different driver?");
            }
        }

        if (!string.IsNullOrEmpty(reservation.CarType) && !TypeValidators.IsValidCarType(reservation.CarType))
        {
            return new ValidationResult(false, CAR_TYPE_SLOT,
                "I did not recognize that model.  What type of car would you like to rent?  " +
                "Popular cars are economy, midsize, or luxury");
        }

        return ValidationResult.VALID_RESULT;
    }