/**
 * Configuration management for QBOMCP-TS
 */
import { QBOConfig, TransportConfig } from '../types';
import { z } from 'zod';
/**
 * Environment variable schema for validation
 */
declare const EnvSchema: z.ZodObject<{
    QBO_CLIENT_ID: z.ZodString;
    QBO_CLIENT_SECRET: z.ZodString;
    QBO_COMPANY_ID: z.ZodString;
    QBO_REFRESH_TOKEN: z.ZodString;
    QBO_ENVIRONMENT: z.ZodDefault<z.ZodEnum<{
        sandbox: "sandbox";
        production: "production";
    }>>;
    QBO_REDIRECT_URI: z.ZodOptional<z.ZodString>;
    NODE_ENV: z.ZodDefault<z.ZodEnum<{
        production: "production";
        development: "development";
        test: "test";
    }>>;
    LOG_LEVEL: z.ZodDefault<z.ZodEnum<{
        error: "error";
        warn: "warn";
        info: "info";
        http: "http";
        verbose: "verbose";
        debug: "debug";
    }>>;
    TRANSPORT_TYPE: z.ZodDefault<z.ZodEnum<{
        stdio: "stdio";
        sse: "sse";
    }>>;
    SSE_PORT: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    SSE_HOST: z.ZodDefault<z.ZodString>;
    CACHE_TTL: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    CACHE_MAX_SIZE: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    API_RETRY_ATTEMPTS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    API_RETRY_DELAY: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    API_TIMEOUT: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    API_RATE_LIMIT_PER_MINUTE: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    CORS_ORIGIN: z.ZodDefault<z.ZodString>;
    RATE_LIMIT_WINDOW_MS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    RATE_LIMIT_MAX_REQUESTS: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
    ENABLE_CACHE: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
    ENABLE_RETRY: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
    ENABLE_HEALTH_CHECK: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
    ENABLE_METRICS: z.ZodDefault<z.ZodCoercedBoolean<unknown>>;
    LOG_DIR: z.ZodDefault<z.ZodString>;
    CACHE_DIR: z.ZodDefault<z.ZodString>;
}, z.core.$strip>;
export type EnvConfig = z.infer<typeof EnvSchema>;
/**
 * Configuration class for managing application settings
 */
export declare class Config {
    private static instance;
    private env;
    private configFile?;
    private constructor();
    /**
     * Get singleton instance
     */
    static getInstance(): Config;
    /**
     * Load configuration from JSON file if it exists
     */
    private loadConfigFile;
    /**
     * Ensure required directories exist
     */
    private ensureDirectories;
    /**
     * Get QuickBooks configuration
     */
    getQBOConfig(): QBOConfig;
    /**
     * Get transport configuration
     */
    getTransportConfig(): TransportConfig;
    /**
     * Get cache configuration
     */
    getCacheConfig(): {
        enabled: boolean;
        ttl: number;
        maxSize: number;
        dir: string;
    };
    /**
     * Get API configuration
     */
    getAPIConfig(): {
        retryAttempts: number;
        retryDelay: number;
        timeout: number;
        rateLimitPerMinute: number;
        enableRetry: boolean;
    };
    /**
     * Get logger configuration
     */
    getLoggerConfig(): {
        level: "error" | "warn" | "info" | "http" | "verbose" | "debug";
        dir: string;
        enableConsole: boolean;
        enableFile: boolean;
    };
    /**
     * Get feature flags
     */
    getFeatureFlags(): {
        cache: boolean;
        retry: boolean;
        healthCheck: boolean;
        metrics: boolean;
    };
    /**
     * Get environment
     */
    getEnv(): 'development' | 'production' | 'test';
    /**
     * Check if in development mode
     */
    isDevelopment(): boolean;
    /**
     * Check if in production mode
     */
    isProduction(): boolean;
    /**
     * Check if in test mode
     */
    isTest(): boolean;
    /**
     * Get a custom config value from config.json
     */
    getCustom<T = any>(path: string, defaultValue?: T): T | undefined;
    /**
     * Get all configuration (for debugging)
     */
    getAll(): any;
}
export declare const config: Config;
export {};
//# sourceMappingURL=config.d.ts.map