import { Primitive } from '../../../types/general';
import { FormFieldStatusMeta } from './form-field-validation-rule';
import { EvaluateResult } from './validation-rule';
import { InternalFormFieldValidationRule } from './internal-form-field-validation-rule.abstract';
/**
 * A rule that checks if it's a valid credit card number
 *
 * @augments {InternalFormFieldValidationRule<string>}
 */
export declare class ValidCreditCardNumberRule extends InternalFormFieldValidationRule<Primitive | Array<Primitive>> {
  /**
   * It takes a string, maps it to an array of numbers, reverses the array, checks the length of the
   * array, maps the even digits to a new array, sums the new array, and returns true if the sum is
   * divisible by 10
   *
   * @param {string} value - string - The card number to validate
   * @returns {boolean} A function that takes a string and returns a boolean.
   */
  private static validateCreditCardDigits;
  /**
   * It checks if the credit card number is valid.
   *
   * @param {string} input - The input value to be evaluated.
   * @returns {EvaluateResult} an object with two properties: isValid and message.
   */
  evaluate(input: string): EvaluateResult;
  /**
   * If the input is accepted and the status is not disabled and visible, then return true
   *
   * @param {unknown} input - The input to be evaluated.
   * @param {FormFieldStatusMeta} [status] - FormFieldStatusMeta
   * @returns {boolean} The return value is a boolean that indicates whether the input can be evaluated.
   */
  canEvaluate(input: unknown, status?: FormFieldStatusMeta): boolean;
  /**
   * If the field is not disabled, visible, and has been touched or modified, then show the error
   *
   * @param {FormFieldStatusMeta} status - FormFieldStatusMeta
   * @returns {boolean} A boolean value.
   */
  shouldShowError(status: FormFieldStatusMeta): boolean;
  /**
   * The function `isValidVisaCreditCard` checks if a given card number is a valid Visa credit card number.
   *
   * @param {string} cardNumber - The `cardNumber` parameter is a string representing a credit card
   * number that needs to be validated as a Visa credit card.
   * @returns {boolean} a boolean value indicating whether the provided card number is a valid Visa credit card.
   */
  protected isValidVisaCreditCard(cardNumber: string): boolean;
  /**
   * The function `isValidMasterCardCreditCard` checks if a given credit card number is a valid Mastercard number.
   *
   * @param {string} cardNumber - The `cardNumber` parameter is a string representing a credit card
   * number that needs to be validated to determine if it belongs to a Mastercard.
   * @returns {boolean} The function isValidMasterCardCreditCard is returning a boolean value, which indicates whether the
   * provided card number is a valid Mastercard.
   */
  protected isValidMasterCardCreditCard(cardNumber: string): boolean;
  /**
   * The function `isValidAmexCreditCard` checks if a given credit card number is a valid American Express
   * card number.
   *
   * @param {string} cardNumber - The `cardNumber` parameter is a string representing a credit card
   * number that needs to be validated as an American Express credit card.
   * @returns {boolean} The `isValidAmexCreditCard` function is returning a boolean value, which indicates whether the
   * provided `cardNumber` is a valid American Express credit card.
   */
  protected isValidAmexCreditCard(cardNumber: string): boolean;
  /**
   * The function `isValidDiscoverCreditCard` checks if a given credit card number is a valid Discover card
   * number.
   *
   * @param {string} cardNumber - The `cardNumber` parameter is a string representing a credit card
   * number that needs to be validated as a Discover credit card.
   * @returns {boolean} a boolean value indicating whether the provided card number is a valid Discover credit
   * card.
   */
  protected isValidDiscoverCreditCard(cardNumber: string): boolean;
  /**
   * If the input is not a string, then return false, otherwise return true.
   *
   * @param {unknown} input - The input value to be validated.
   * @returns {boolean} a boolean value.
   */
  private isAcceptedInputType;
  /**
   * The `formatCreditCardNumber` function removes all spaces from a given credit card number string.
   *
   * @param {string} cardNumber - The `cardNumber` parameter is a string representing a credit card
   * number. The `formatCreditCardNumber` function removes any white space characters from the input
   * `cardNumber` string and returns the formatted credit card number.
   * @returns {string} The `formatCreditCardNumber` function returns the `cardNumber` string with all spaces
   * removed.
   */
  private formatCreditCardNumber;
  /**
   * The function checks if a given credit card number matches any of the supported card types (Visa,
   * MasterCard, Amex, Discover).
   *
   * @param {string} formattedCardNumber - The `formattedCardNumber` parameter is a string representing a
   * credit card number that has been formatted in a specific way. The function
   * `isSupportedCreditCardType` checks if the provided credit card number matches any of the regular
   * expressions for Visa, MasterCard, American Express (Amex), or Discover
   * @returns {boolean} The `isSupportedCreditCardType` function is returning a boolean value based on whether the
   * `formattedCardNumber` matches any of the regular expressions for Visa, MasterCard, American Express
   * (Amex), or Discover credit card types. If the `formattedCardNumber` matches any of these card types,
   * the function will return `true`, indicating that the credit card type is supported. Otherwise, it
   */
  private isSupportedCreditCardType;
}
