import { Logger } from "@decaf-ts/logging";
import { BCCSPConfig, CAConfig, CorsConfig, CSRConfig, DBConfig, IdemixConfig, Identity, IntermediateCAConfig, LDAPConfig, ServerTLSConfig, SigningConfig } from "../interfaces/fabric/fabric-ca-server-config";
import { MetricsConfig, OperationsConfig } from "../interfaces/fabric/general-configs";
export declare class FabricCAServerConfigBuilder {
    private log;
    private config;
    constructor(logger?: Logger);
    setVersion(version?: string): this;
    /**
     * @description Sets the port for the Fabric CA Server.
     * @summary Configures the network port on which the Fabric CA Server will listen for incoming connections.
     * @param {number} [port] - The port number for the Fabric CA Server to listen on.
     * @return {this} The current instance of the builder for method chaining.
     */
    setPort(port?: number): this;
    setCors(cors?: CorsConfig): this;
    /**
     * @description Enables or disables debug mode for the Fabric CA Server.
     * @summary Configures whether the Fabric CA Server should run in debug mode, providing more detailed logging and output.
     * @param {boolean} [enable] - Whether to enable debug mode.
     * @return {this} The current instance of the builder for method chaining.
     */
    enableDebug(enable?: boolean): this;
    setCrlSizeLimit(crlSizeLimit?: number): this;
    setServerTLS(tlsConfig?: ServerTLSConfig): this;
    setCA(config?: CAConfig): this;
    setCrlExpiry(crlExpiry?: string): this;
    setIdentities(ids?: Identity[] | Identity): this;
    setMaxEnrollments(maxEnrollments?: number): this;
    setDatabase(cfg?: DBConfig): this;
    setLDAP(ldap?: LDAPConfig): this;
    setAffiliations(affiliations?: {
        [key: string]: string[];
    }): this;
    /**
     * @description Removes unused profiles from the Fabric CA Server configuration.
     * @summary This method allows you to remove the TLS and/or CA profiles from the configuration if they are not needed.
     * Removing unused profiles can help streamline the configuration and potentially improve performance.
     * @param {boolean} [removeTLSProfile=false] - Whether to remove the TLS profile.
     * @param {boolean} [removeCAProfile=false] - Whether to remove the CA profile.
     * @return {this} The current instance of the builder for method chaining.
     * @example
     * const builder = new FabricCAServerCommandBuilder();
     * builder.removeUnusedProfiles(true, false); // Removes TLS profile, keeps CA profile
     *
     * @mermaid
     * sequenceDiagram
     *   participant Client
     *   participant Builder as FabricCAServerCommandBuilder
     *   participant Config as FabricCAServerConfig
     *   Client->>Builder: removeUnusedProfiles(true, false)
     *   Builder->>Builder: Check removeTLSProfile
     *   alt removeTLSProfile is true
     *     Builder->>Config: Remove TLS profile
     *   end
     *   Builder->>Builder: Check removeCAProfile
     *   alt removeCAProfile is true
     *     Builder->>Config: Remove CA profile
     *   end
     *   Builder-->>Client: Return this
     */
    removeUnusedProfiles(removeTLSProfile?: boolean, removeCAProfile?: boolean): this;
    setSigning(cfg?: SigningConfig): this;
    setCSR(csr?: CSRConfig): this;
    setIdemix(idemix?: IdemixConfig): this;
    setBCCSP(bccsp?: BCCSPConfig): this;
    setCACount(count?: number): this;
    setCAFiles(files?: string[]): this;
    setIntermediate(int: IntermediateCAConfig): this;
    setPasswordAttempts(attempts?: number): this;
    setOperations(operations?: OperationsConfig): this;
    setMetrics(metrics?: MetricsConfig): this;
    /**
     * @description Saves the current configuration to a file.
     * @summary Writes the current Fabric CA Server configuration to a YAML file at the specified path. If the directory doesn't exist, it will be created.
     * @param {string} cpath - The path where the configuration file should be saved.
     * @return {this} The current instance of the builder for method chaining.
     * @example
     * const builder = new FabricCAServerCommandBuilder();
     * builder.save('/path/to/config/fabric-ca-server.yaml');
     *
     * @mermaid
     * sequenceDiagram
     *   participant Client
     *   participant Builder as FabricCAServerCommandBuilder
     *   participant FileSystem as File System
     *   Client->>Builder: saveConfig('/path/to/config/fabric-ca-server.yaml')
     *   Builder->>Builder: Check if cpath is defined
     *   alt cpath is defined
     *     Builder->>FileSystem: Check if directory exists
     *     alt Directory doesn't exist
     *       Builder->>FileSystem: Create directory
     *     end
     *     Builder->>Builder: Log debug message
     *     Builder->>FileSystem: Write YAML configuration to file
     *   end
     *   Builder-->>Client: Return this
     */
    save(cpath?: string): this;
}
