validate method
Validate the request data.
Performs comprehensive validation on the payment request including:
- Amount validation (positive, within currency limits)
- Email format validation
- Reference format validation (if provided)
- Callback URL validation (if provided)
Throws
- ArgumentError if any validation fails
Implementation
@override
void validate() {
  super.validate();
  if (phoneNumber.isEmpty) {
    throw ArgumentError('Phone number is required for mobile money payments');
  }
  if (!ValidationUtils.isValidPhoneNumber(phoneNumber)) {
    throw ArgumentError(
      'Phone number must be in E.164 format (e.g., +1234567890) and be valid',
    );
  }
  // Validate provider-specific requirements
  switch (provider) {
    case MobileMoneyProvider.mpesa:
      // M-Pesa is primarily for Kenya, so check for Kenyan numbers
      if (!phoneNumber.startsWith('+254')) {
        throw ArgumentError(
          'M-Pesa payments require a Kenyan phone number (+254)',
        );
      }
      break;
    case MobileMoneyProvider.airtel:
    case MobileMoneyProvider.vodafone:
    case MobileMoneyProvider.tigo:
      // These are primarily for Ghana, so check for Ghanaian numbers
      if (!phoneNumber.startsWith('+233')) {
        throw ArgumentError(
          '${provider.name} payments require a Ghanaian phone number (+233)',
        );
      }
      break;
  }
}