import { Validator as Validator$1 } from '@kodepandai/node-input-validator';
import { ServiceProvider, Application, Request } from '@lunoxjs/core';
import * as _lunoxjs_core_dist_useFacade_2248e61a from '@lunoxjs/core/dist/useFacade-2248e61a';
import { FormRequest as FormRequest$1 } from '@lunoxjs/core/contracts';

declare class Validator extends Validator$1 {
    protected _inputs: Record<string, any>;
    constructor(data: Record<string, any>, rules: Record<string, any>, messages: Record<string, any>, customAttributes?: Record<string, any>);
    fails(): Promise<boolean>;
    validate(inputs?: Record<string, any>): Promise<any>;
}

declare class ValidationException extends Error {
    status: number;
    protected validator: Validator;
    constructor(validator: Validator);
    errors(): any;
}

declare class ValidationServiceProvider extends ServiceProvider {
    register(): Promise<void>;
    boot(): Promise<void>;
}

interface Rule {
    name: string;
    passes: (args: string[] | undefined, value: any) => Promise<boolean>;
    message?: string;
}

declare class Factory {
    static symbol: symbol;
    protected app: Application;
    constructor(app: Application);
    make(data: Record<string, any>, rules: Record<string, string>, messages?: Record<string, string>, customAttributes?: Record<string, string>): Validator;
    extend(rule: Rule): void;
}

declare const _default: Factory & typeof _lunoxjs_core_dist_useFacade_2248e61a.a;

interface FormRequest {
    validate(rules: Record<string, string>, messages?: Record<string, string>, customAttributes?: Record<string, string>): Promise<any>;
}
declare class FormRequest extends Request implements FormRequest$1<Validator> {
    /**
     * validator instance.
     */
    protected validator: Validator | null;
    /**
     * Get rules for validator.
     */
    rules(): Record<string, any>;
    /**
     * Get custom messages for validator errors.
     */
    messages(): Record<string, any>;
    /**
     * Set validator instance.
     */
    setValidator(validator: Validator): this;
    /**
     * Get custom attributes for validator errors.
     */
    attributes(): Record<string, any>;
    /**
     * Validate this form request.
     */
    validateForm(): Promise<any>;
    /**
     * Create default validator instance
     */
    protected createDefaultValidator(factory: Factory): Validator;
    /**
     * Get validator instance for the request.
     */
    getValidator(): Validator;
}

declare module "@lunoxjs/core/contracts" {
    interface Request extends InstanceType<typeof Request> {
        validate(rules: Record<string, string>, messages?: Record<string, string>, customAttributes?: Record<string, string>): Promise<any>;
    }
}

export { FormRequest, Rule, ValidationException, ValidationServiceProvider, _default as Validator };
