import { z } from 'zod';
/**
 * Schema for Sanity CMS configuration
 */
declare const sanityConfigSchema: z.ZodObject<{
    /**
     * Sanity project ID - unique identifier for your Sanity project
     * @example "abc123def"
     */
    projectId: z.ZodString;
    /**
     * Sanity dataset name - typically 'production', 'development', or 'staging'
     * @example "production"
     */
    dataset: z.ZodString;
    /**
     * Optional Sanity API token for authenticated requests
     * Required for write operations or accessing private datasets
     */
    apiToken: z.ZodOptional<z.ZodString>;
    /**
     * Sanity API version - determines which version of the API to use
     * @default "2023-05-03"
     */
    apiVersion: z.ZodDefault<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    projectId: string;
    dataset: string;
    apiVersion: string;
    apiToken?: string | undefined;
}, {
    projectId: string;
    dataset: string;
    apiToken?: string | undefined;
    apiVersion?: string | undefined;
}>;
/**
 * Schema for CMS routing configuration
 */
declare const cmsConfigSchema: z.ZodObject<{
    /**
     * Base route path for CMS pages
     * Must start and end with forward slashes
     * @default "/cms/"
     * @example "/blog/", "/content/"
     */
    routePath: z.ZodEffects<z.ZodDefault<z.ZodString>, string, string | undefined>;
}, "strip", z.ZodTypeAny, {
    routePath: string;
}, {
    routePath?: string | undefined;
}>;
/**
 * Complete configuration schema for the AI Growth CMS library
 */
export declare const configSchema: z.ZodObject<{
    sanity: z.ZodObject<{
        /**
         * Sanity project ID - unique identifier for your Sanity project
         * @example "abc123def"
         */
        projectId: z.ZodString;
        /**
         * Sanity dataset name - typically 'production', 'development', or 'staging'
         * @example "production"
         */
        dataset: z.ZodString;
        /**
         * Optional Sanity API token for authenticated requests
         * Required for write operations or accessing private datasets
         */
        apiToken: z.ZodOptional<z.ZodString>;
        /**
         * Sanity API version - determines which version of the API to use
         * @default "2023-05-03"
         */
        apiVersion: z.ZodDefault<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        projectId: string;
        dataset: string;
        apiVersion: string;
        apiToken?: string | undefined;
    }, {
        projectId: string;
        dataset: string;
        apiToken?: string | undefined;
        apiVersion?: string | undefined;
    }>;
    cms: z.ZodObject<{
        /**
         * Base route path for CMS pages
         * Must start and end with forward slashes
         * @default "/cms/"
         * @example "/blog/", "/content/"
         */
        routePath: z.ZodEffects<z.ZodDefault<z.ZodString>, string, string | undefined>;
    }, "strip", z.ZodTypeAny, {
        routePath: string;
    }, {
        routePath?: string | undefined;
    }>;
}, "strip", z.ZodTypeAny, {
    sanity: {
        projectId: string;
        dataset: string;
        apiVersion: string;
        apiToken?: string | undefined;
    };
    cms: {
        routePath: string;
    };
}, {
    sanity: {
        projectId: string;
        dataset: string;
        apiToken?: string | undefined;
        apiVersion?: string | undefined;
    };
    cms: {
        routePath?: string | undefined;
    };
}>;
/**
 * TypeScript type for the complete configuration
 */
export type Config = z.infer<typeof configSchema>;
/**
 * TypeScript type for Sanity-specific configuration
 */
export type SanityConfig = z.infer<typeof sanityConfigSchema>;
/**
 * TypeScript type for CMS-specific configuration
 */
export type CmsConfig = z.infer<typeof cmsConfigSchema>;
/**
 * Schema for client-safe configuration (browser-accessible)
 * Only includes non-sensitive data that can be safely exposed to the client
 */
declare const clientConfigSchema: z.ZodObject<{
    cms: z.ZodObject<{
        routePath: z.ZodEffects<z.ZodDefault<z.ZodString>, string, string | undefined>;
    }, "strip", z.ZodTypeAny, {
        routePath: string;
    }, {
        routePath?: string | undefined;
    }>;
    sanity: z.ZodObject<{
        projectId: z.ZodOptional<z.ZodString>;
        dataset: z.ZodOptional<z.ZodString>;
        apiVersion: z.ZodDefault<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        apiVersion: string;
        projectId?: string | undefined;
        dataset?: string | undefined;
    }, {
        projectId?: string | undefined;
        dataset?: string | undefined;
        apiVersion?: string | undefined;
    }>;
}, "strip", z.ZodTypeAny, {
    sanity: {
        apiVersion: string;
        projectId?: string | undefined;
        dataset?: string | undefined;
    };
    cms: {
        routePath: string;
    };
}, {
    sanity: {
        projectId?: string | undefined;
        dataset?: string | undefined;
        apiVersion?: string | undefined;
    };
    cms: {
        routePath?: string | undefined;
    };
}>;
/**
 * TypeScript type for client-safe configuration
 */
export type ClientConfig = z.infer<typeof clientConfigSchema>;
/**
 * Environment variable names used by the configuration system
 */
export declare const ENV_VARS: {
    readonly SANITY_PROJECT_ID: "SANITY_PROJECT_ID";
    readonly SANITY_DATASET: "SANITY_DATASET";
    readonly SANITY_API_TOKEN: "SANITY_API_TOKEN";
    readonly SANITY_API_VERSION: "SANITY_API_VERSION";
    readonly CMS_ROUTE_PATH: "CMS_ROUTE_PATH";
    readonly NEXT_PUBLIC_SANITY_PROJECT_ID: "NEXT_PUBLIC_SANITY_PROJECT_ID";
    readonly NEXT_PUBLIC_SANITY_DATASET: "NEXT_PUBLIC_SANITY_DATASET";
    readonly NEXT_PUBLIC_SANITY_API_VERSION: "NEXT_PUBLIC_SANITY_API_VERSION";
    readonly NEXT_PUBLIC_CMS_ROUTE_PATH: "NEXT_PUBLIC_CMS_ROUTE_PATH";
};
/**
 * Error class for configuration validation failures
 */
export declare class ConfigurationError extends Error {
    details?: z.ZodError | undefined;
    constructor(message: string, details?: z.ZodError | undefined);
}
/**
 * Loads and validates configuration from environment variables
 *
 * @param options Configuration loading options
 * @param options.useCache Whether to use cached configuration (default: true)
 * @param options.env Custom environment object (default: process.env)
 * @returns Validated configuration object
 * @throws ConfigurationError when validation fails
 *
 * @example
 * ```typescript
 * // Load configuration with caching
 * const config = getConfig();
 * console.log(config.sanity.projectId);
 *
 * // Force reload without cache
 * const freshConfig = getConfig({ useCache: false });
 *
 * // Use custom environment (useful for testing)
 * const testConfig = getConfig({
 *   env: { SANITY_PROJECT_ID: 'test', SANITY_DATASET: 'test' }
 * });
 * ```
 */
export declare function getConfig(options?: {
    useCache?: boolean;
    env?: Record<string, string | undefined>;
}): Config;
/**
 * Clears the configuration cache
 * Useful for testing or when environment variables change at runtime
 */
export declare function clearConfigCache(): void;
/**
 * Gets the complete Sanity configuration object
 *
 * @param options Configuration loading options
 * @returns Sanity configuration object with projectId, dataset, apiToken, and apiVersion
 * @throws ConfigurationError when configuration is invalid
 *
 * @example
 * ```typescript
 * const sanityConfig = getSanityConfig();
 * console.log(sanityConfig.projectId, sanityConfig.dataset);
 * ```
 */
export declare function getSanityConfig(options?: Parameters<typeof getConfig>[0]): SanityConfig;
/**
 * Gets the CMS route path
 *
 * @param options Configuration loading options
 * @returns The base route path for CMS pages (e.g., "/cms/")
 * @throws ConfigurationError when configuration is invalid
 *
 * @example
 * ```typescript
 * const routePath = getCmsRoutePath();
 * // Use in Next.js router: router.push(`${routePath}posts`)
 * ```
 */
export declare function getCmsRoutePath(options?: Parameters<typeof getConfig>[0]): string;
/**
 * Gets configuration specific to the Sanity client initialization
 * Optimized for CDN usage with published content when no token is available
 *
 * @param options Configuration loading options
 * @returns Sanity client configuration object
 *
 * @example
 * ```typescript
 * const clientConfig = getSanityClientConfig();
 * const sanityClient = createClient(clientConfig);
 * ```
 */
export declare function getSanityClientConfig(options?: Parameters<typeof getConfig>[0]): {
    projectId: string;
    dataset: string;
    apiVersion: string;
    token?: string;
    useCdn?: boolean;
};
/**
 * Checks if a Sanity API token is available
 * Useful for conditional features that require authentication
 *
 * @param options Configuration loading options
 * @returns true if API token is configured, false otherwise
 * @throws ConfigurationError when configuration is invalid
 *
 * @example
 * ```typescript
 * if (isSanityTokenAvailable()) {
 *   // Enable write operations
 *   await client.create(document);
 * } else {
 *   // Read-only mode
 *   console.log('Running in read-only mode');
 * }
 * ```
 */
export declare function isSanityTokenAvailable(options?: Parameters<typeof getConfig>[0]): boolean;
/**
 * Gets the Sanity API version string
 *
 * @param options Configuration loading options
 * @returns The API version string (e.g., "2023-05-03")
 * @throws ConfigurationError when configuration is invalid
 *
 * @example
 * ```typescript
 * const apiVersion = getApiVersion();
 * // Use in direct API calls: `https://projectId.api.sanity.io/v${apiVersion}/...`
 * ```
 */
export declare function getApiVersion(options?: Parameters<typeof getConfig>[0]): string;
/**
 * Gets the Sanity project ID
 *
 * @param options Configuration loading options
 * @returns The Sanity project ID string
 * @throws ConfigurationError when configuration is invalid
 *
 * @example
 * ```typescript
 * const projectId = getProjectId();
 * // Use for custom API endpoints or analytics
 * ```
 */
export declare function getProjectId(options?: Parameters<typeof getConfig>[0]): string;
/**
 * Gets the Sanity dataset name
 *
 * @param options Configuration loading options
 * @returns The dataset name (e.g., "production", "development")
 * @throws ConfigurationError when configuration is invalid
 *
 * @example
 * ```typescript
 * const dataset = getDataset();
 * // Use for environment-specific logic
 * if (dataset === 'development') {
 *   console.log('Running in development mode');
 * }
 * ```
 */
export declare function getDataset(options?: Parameters<typeof getConfig>[0]): string;
/**
 * Detects if the code is running in a browser environment
 */
export declare function isClient(): boolean;
/**
 * Detects if the code is running in a server environment
 */
export declare function isServer(): boolean;
/**
 * Gets client-safe configuration for browser environment
 * Automatically falls back from NEXT_PUBLIC_ variables to regular variables if not found
 *
 * @param options Configuration loading options
 * @returns Client-safe configuration object
 *
 * @example
 * ```typescript
 * const clientConfig = getClientConfig();
 * const routePath = clientConfig.cms.routePath; // '/cms/'
 * const projectId = clientConfig.sanity.projectId; // Uses NEXT_PUBLIC_SANITY_PROJECT_ID or SANITY_PROJECT_ID
 * const dataset = clientConfig.sanity.dataset; // Uses NEXT_PUBLIC_SANITY_DATASET or SANITY_DATASET
 * const apiVersion = clientConfig.sanity.apiVersion; // '2023-05-03'
 * ```
 */
export declare function getClientConfig(options?: {
    useCache?: boolean;
    env?: Record<string, string | undefined>;
}): ClientConfig;
/**
 * Gets configuration specifically from NEXT_PUBLIC_ environment variables
 * These are the only variables available in the browser in Next.js
 *
 * @param options Configuration loading options
 * @returns Public configuration object with only NEXT_PUBLIC_ variables
 *
 * @example
 * ```typescript
 * // Only works with NEXT_PUBLIC_ prefixed variables
 * const publicConfig = getPublicConfig();
 * ```
 */
export declare function getPublicConfig(options?: {
    useCache?: boolean;
    env?: Record<string, string | undefined>;
}): ClientConfig;
/**
 * Clears the client configuration cache
 * Useful for testing or when environment variables change at runtime
 */
export declare function clearClientConfigCache(): void;
/**
 * Gets a configuration object appropriate for the current environment
 * Returns full configuration on server, client-safe configuration in browser
 *
 * @param options Configuration loading options
 * @returns Configuration object appropriate for current environment
 *
 * @example
 * ```typescript
 * // Automatically chooses the right config based on environment
 * const config = getEnvironmentConfig();
 *
 * // On server: includes projectId, dataset, apiToken, etc.
 * // In browser: only includes apiVersion and routePath
 * ```
 */
export declare function getEnvironmentConfig(options?: {
    useCache?: boolean;
    env?: Record<string, string | undefined>;
}): ClientConfig | Config;
/**
 * Helper function to get CMS route path that works in both environments
 * Uses client-safe configuration in browser, full configuration on server
 *
 * @param options Configuration loading options
 * @returns CMS route path string
 *
 * @example
 * ```typescript
 * // Works in both server and client
 * const routePath = getCmsRoutePathSafe();
 * ```
 */
export declare function getCmsRoutePathSafe(options?: Parameters<typeof getClientConfig>[0]): string;
/**
 * Helper function to get API version that works in both environments
 * Uses client-safe configuration in browser, full configuration on server
 *
 * @param options Configuration loading options
 * @returns API version string
 *
 * @example
 * ```typescript
 * // Works in both server and client
 * const apiVersion = getApiVersionSafe();
 * ```
 */
export declare function getApiVersionSafe(options?: Parameters<typeof getClientConfig>[0]): string;
/**
 * Helper function to get project ID that works in both environments
 * Uses client-safe configuration in browser (if available), full configuration on server
 *
 * @param options Configuration loading options
 * @returns Project ID string or undefined if not available in client environment
 *
 * @example
 * ```typescript
 * // Works in both server and client
 * const projectId = getProjectIdSafe();
 * if (projectId) {
 *   // Use project ID
 * }
 * ```
 */
export declare function getProjectIdSafe(options?: Parameters<typeof getClientConfig>[0]): string | undefined;
/**
 * Helper function to get dataset that works in both environments
 * Uses client-safe configuration in browser (if available), full configuration on server
 *
 * @param options Configuration loading options
 * @returns Dataset string or undefined if not available in client environment
 *
 * @example
 * ```typescript
 * // Works in both server and client
 * const dataset = getDatasetSafe();
 * if (dataset) {
 *   // Use dataset
 * }
 * ```
 */
export declare function getDatasetSafe(options?: Parameters<typeof getClientConfig>[0]): string | undefined;
/**
 * Configuration validation result
 */
export type ConfigValidationResult = {
    isValid: boolean;
    errors: string[];
    warnings: string[];
    config?: Config | ClientConfig;
    environment: 'server' | 'client';
};
/**
 * Validates configuration at startup and provides detailed feedback
 * Useful for verifying all required configuration is present before the application starts
 *
 * @param options Validation options
 * @param options.env Custom environment object (default: process.env)
 * @param options.throwOnError Whether to throw an error if validation fails (default: false)
 * @returns Detailed validation result with errors, warnings, and config if valid
 *
 * @example
 * ```typescript
 * // Validate configuration at app startup
 * const result = validateConfiguration();
 * if (!result.isValid) {
 *   console.error('Configuration errors:', result.errors);
 *   process.exit(1);
 * }
 *
 * // In development, show warnings too
 * if (result.warnings.length > 0) {
 *   console.warn('Configuration warnings:', result.warnings);
 * }
 * ```
 */
export declare function validateConfiguration(options?: {
    env?: Record<string, string | undefined>;
    throwOnError?: boolean;
}): ConfigValidationResult;
/**
 * Gets the current configuration status and health
 * Provides a quick overview of configuration state without throwing errors
 *
 * @param options Configuration options
 * @returns Configuration status information
 *
 * @example
 * ```typescript
 * const status = getConfigurationStatus();
 * console.log(`Environment: ${status.environment}`);
 * console.log(`Valid: ${status.isValid}`);
 * console.log(`Has Token: ${status.hasApiToken}`);
 * ```
 */
export declare function getConfigurationStatus(options?: {
    env?: Record<string, string | undefined>;
}): {
    environment: 'server' | 'client';
    isValid: boolean;
    hasApiToken: boolean;
    hasPublicVariables: boolean;
    configuredVariables: string[];
    missingRequiredVariables: string[];
};
/**
 * Debug utility to display current configuration state
 * Useful during development to understand what configuration is loaded
 *
 * @param options Debug options
 * @param options.env Custom environment object (default: process.env)
 * @param options.showValues Whether to show actual values (default: false for security)
 * @param options.maskSensitive Whether to mask sensitive values (default: true)
 * @returns Debug information object
 *
 * @example
 * ```typescript
 * // Safe debugging (masks sensitive values)
 * const debug = debugConfiguration();
 * console.log('Debug Info:', debug);
 *
 * // Development debugging (shows values but still masks sensitive)
 * const debugWithValues = debugConfiguration({ showValues: true });
 * console.log('Config Values:', debugWithValues);
 * ```
 */
export declare function debugConfiguration(options?: {
    env?: Record<string, string | undefined>;
    showValues?: boolean;
    maskSensitive?: boolean;
}): {
    environment: string;
    timestamp: string;
    configurationStatus: ReturnType<typeof getConfigurationStatus>;
    validationResult: ConfigValidationResult;
    environmentVariables: Record<string, string | undefined>;
};
export {};
//# sourceMappingURL=config.d.ts.map