import { z } from 'zod';
import { Rule, RuleJSON } from './Rule';
import { From } from './From';
import { Name } from './Name';
import { Purpose } from './Purpose';
/**
 * Zod schema for validating submission requirement values.
 *
 * This schema ensures that a submission requirement is an object with the following properties:
 * - rule: A string that must be either 'all' or 'pick'.
 * - name: An optional string.
 * - purpose: An optional string.
 * - from: An optional string.
 * - from_nested: An optional array of submission requirement objects.
 * - count: An optional number.
 * - min: An optional number.
 * - max: An optional number.
 *
 * @type {z.ZodType<SubmissionRequirementJSON>}
 *
 * @example
 * // Valid usage
 * submissionRequirementSchema.parse({
 *  rule: 'all',
 *  name: 'name',
 *  purpose: 'purpose',
 *  from: 'from',
 * }); // Returns { rule: 'all', name: 'name', purpose: 'purpose', from: 'from'}
 *
 * // Invalid usage (will throw ZodError)
 * submissionRequirementSchema.parse({}); // Throws error: Object has missing required properties
 */
export declare const submissionRequirementSchema: z.ZodType<SubmissionRequirementJSON>;
/**
 * Type of a submission requirement.
 */
export type SubmissionRequirementJSON = {
    name?: string | undefined;
    purpose?: string | undefined;
    from?: string | undefined;
    from_nested?: SubmissionRequirementJSON[] | undefined;
} & RuleJSON;
/**
 * Represents a submission requirement.
 * @class
 *
 * @example
 * // Create a valid SubmissionRequirement instance
 * const validSubmissionRequirement = new SubmissionRequirement(
 *  new Rule.Pick(1, 1, 1),
 *  new From.FromGroup(new Group('group')),
 *  new Name('name'),
 *  new Purpose('purpose')
 * );
 */
export declare class SubmissionRequirement {
    rule: Rule;
    from: From;
    name?: Name | undefined;
    purpose?: Purpose | undefined;
    constructor(rule: Rule, from: From, name?: Name | undefined, purpose?: Purpose | undefined);
    /**
     * Creates an instance of SubmissionRequirement.
     * @param {SubmissionRequirementJSON} json - the JSON representation of the SubmissionRequirement.
     * @returns {SubmissionRequirement} A submission requirement instance.
     */
    static fromJSON(json: SubmissionRequirementJSON): SubmissionRequirement;
    /**
     * Returns the JSON representation of the SubmissionRequirement.
     *
     * This method is used for JSON serialization.
     *
     * @returns {SubmissionRequirementJSON} The submission requirement JSON.
     */
    toJSON(): SubmissionRequirementJSON;
}
/**
 * Namespace for SubmissionRequirement.
 * @namespace
 */
export declare namespace SubmissionRequirement {
    /**
     * Returns all unique groups in the submission requirement.
     * @param {SubmissionRequirement} instance - The submission requirement instance.
     * @returns {Set<string>} A set of groups.
     */
    const allGroups: (instance: SubmissionRequirement) => Set<string>;
}
