import Common from './Common';
import { FilesSource, Options, Unit, DateConverter } from './@types';
import CustomDate from './CustomDate';
import { TextOptions, URLOptions, PasswordOptions, PhoneNumberOptions } from './@types/rules/TextRules';
import { NumberOptions } from './@types/rules/NumberRules';
import { ChoiceOptions } from './@types/rules/ChoiceRule';
import { RangeOptions } from './@types/rules/RangeRule';
import { FileOptions } from './@types/rules/FilesRule';
export default class Validator<F extends string = string> extends Common<F> {
    private files;
    private fileName;
    private phoneNumberErrors;
    /**
     * gets the file type of the given file
     * @param filePath
     */
    private getFileType;
    /**
     * validate match against rule
     */
    private matchAgainst;
    /**
     * runs post validation
     */
    private postValidate;
    /**
     * resolves regex, returning a regex object
     * @param regex
     */
    private resolveRegex;
    /**
     * validates regex check none rules
     */
    protected regexCheckNone(value: string, options: TextOptions): boolean;
    /**
     * validates regex check any rules
     */
    protected regexCheckAny(value: string, options: TextOptions): boolean;
    /**
     * validates regex check all rules
     */
    protected regexCheckAll(value: string, options: TextOptions): boolean;
    /**
     * check if value matches a pattern
     */
    protected regexCheck(value: string, options: TextOptions): boolean;
    /**
     * runs regex rule checks
     */
    protected checkRegexRules(value: string, options: Options): boolean;
    /**
     * constructs error message for limiting rule errors
     */
    protected constructLRErrorMessage(prefix: string, template: string, value: number | CustomDate, unit: Unit): string;
    /**
     * checks the limiting rules such as min, max, lt, gt
     */
    protected checkLimitingRules(value: string, length: number | CustomDate, options: NumberOptions, unit: Unit, dateConverter?: DateConverter, prefix?: string): boolean;
    protected setup(required: boolean, field: string, value: string, options: Options, index: number, isFile?: boolean): boolean;
    /**
     * sets the files source
     */
    setFiles(files: FilesSource): this;
    /**
     * returns the computed file name for the last file validation that involved a moveTo
     * operation. Returns empty string if there is non
     */
    getFileName(): string;
    /**
     * validate text
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateText(required: boolean, field: string, value: string, options: TextOptions, index: number): boolean;
    /**
     * validate email address
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateEmail(required: boolean, field: string, value: string, options: TextOptions, index: number): boolean;
    /**
     * validate url
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateURL(required: boolean, field: string, value: string, options: URLOptions, index: number): boolean;
    /**
     * validate phone number
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validatePhoneNumber(required: boolean, field: string, value: string, options: PhoneNumberOptions, index: number): boolean;
    /**
     * validate password
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validatePassword(required: boolean, field: string, value: string, options: PasswordOptions, index: number): boolean;
    /**
     * validates date
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateDate(required: boolean, field: string, value: string, options: NumberOptions, index: number): boolean;
    /**
     * validates integer
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateInt(required: boolean, field: string, value: string, options: NumberOptions, index: number): boolean;
    /**
     * validates positive integer
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validatePInt(required: boolean, field: string, value: string, options: NumberOptions, index: number): boolean;
    /**
     * validates negative integer
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateNInt(required: boolean, field: string, value: string, options: NumberOptions, index: number): boolean;
    /**
     * validates floating point numbers
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateNumber(required: boolean, field: string, value: string, options: NumberOptions, index: number): boolean;
    /**
     * validates positive floating point numbers
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validatePNumber(required: boolean, field: string, value: string, options: NumberOptions, index: number): boolean;
    /**
     * validates negative floating point numbers
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateNNumber(required: boolean, field: string, value: string, options: NumberOptions, index: number): boolean;
    /**
     * validates choice
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateChoice(required: boolean, field: string, value: string, options: ChoiceOptions, index: number): boolean;
    /**
     * validates range
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateRange(required: boolean, field: string, value: string, options: RangeOptions, index: number): boolean;
    /**
     * validates files
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateFile(required: boolean, field: string, value: string, options: FileOptions, index: number, category?: string | string[], label?: string): Promise<boolean>;
    /**
     * validates image files
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateImage(required: boolean, field: string, value: string, options: FileOptions, index: number): Promise<boolean>;
    /**
     * validates audio files
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateAudio(required: boolean, field: string, value: string, options: FileOptions, index: number): Promise<boolean>;
    /**
     * validates video files
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateVideo(required: boolean, field: string, value: string, options: FileOptions, index: number): Promise<boolean>;
    /**
     * validates media files
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateMedia(required: boolean, field: string, value: string, options: FileOptions, index: number): Promise<boolean>;
    /**
     * validates document files
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateDocument(required: boolean, field: string, value: string, options: FileOptions, index: number): Promise<boolean>;
    /**
     * validates document files
     *
     * @param required boolean indicating if field is required
     * @param field field name under validation
     * @param value field value under validation
     * @param options validation options
     * @param index field value index position
     */
    validateArchive(required: boolean, field: string, value: string, options: FileOptions, index: number): Promise<boolean>;
}
