/**
 * AWS Mock Manager
 *
 * Provides standardized setup and teardown for AWS SDK mock clients
 * in integration tests. This eliminates repetitive mock configuration
 * across test files and ensures consistent mock behavior.
 *
 * Usage:
 *   import { AWSMockManager, createDynamoDBMock } from './utilities/aws-mock-manager'
 *
 *   // Option 1: Use individual mock creators
 *   const { mock, client, reset, restore } = createDynamoDBMock()
 *
 *   // Option 2: Use the manager for multiple services
 *   const manager = new AWSMockManager()
 *   const dynamoDB = manager.getDynamoDB()
 *   const s3 = manager.getS3()
 *
 *   beforeEach(() => manager.resetAll())
 *   afterAll(() => manager.restoreAll())
 */
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { S3Client } from '@aws-sdk/client-s3';
import { SESv2Client } from '@aws-sdk/client-sesv2';
import { SFNClient } from '@aws-sdk/client-sfn';
import { SNSClient } from '@aws-sdk/client-sns';
import { SQSClient } from '@aws-sdk/client-sqs';
import { AwsClientStub } from 'aws-sdk-client-mock';
/**
 * Configuration options for mock clients
 */
export interface MockClientOptions {
    region?: string;
    maxAttempts?: number;
    retryMode?: 'standard' | 'adaptive';
}
/**
 * Result from creating a mock client
 */
export interface MockClientResult<TClient> {
    /** The mock client stub for configuring responses */
    mock: AwsClientStub<TClient>;
    /** The actual client instance configured with the mock */
    client: TClient;
    /** Reset the mock to clear all configured behaviors */
    reset: () => void;
    /** Restore the mock and destroy the client */
    restore: () => void;
}
/**
 * Creates a mocked DynamoDB client
 */
export declare function createDynamoDBMock(options?: MockClientOptions): MockClientResult<DynamoDBClient>;
/**
 * Creates a mocked S3 client
 */
export declare function createS3Mock(options?: MockClientOptions): MockClientResult<S3Client>;
/**
 * Creates a mocked SQS client
 */
export declare function createSQSMock(options?: MockClientOptions): MockClientResult<SQSClient>;
/**
 * Creates a mocked SNS client
 */
export declare function createSNSMock(options?: MockClientOptions): MockClientResult<SNSClient>;
/**
 * Creates a mocked Step Functions client
 */
export declare function createSFNMock(options?: MockClientOptions): MockClientResult<SFNClient>;
/**
 * Creates a mocked SES v2 client
 */
export declare function createSESMock(options?: MockClientOptions): MockClientResult<SESv2Client>;
/**
 * Manages multiple AWS mock clients for test suites
 */
export declare class AWSMockManager {
    private dynamoDB?;
    private s3?;
    private sqs?;
    private sns?;
    private sfn?;
    private ses?;
    private options;
    constructor(options?: MockClientOptions);
    /**
     * Gets or creates the DynamoDB mock
     */
    getDynamoDB(): MockClientResult<DynamoDBClient>;
    /**
     * Gets or creates the S3 mock
     */
    getS3(): MockClientResult<S3Client>;
    /**
     * Gets or creates the SQS mock
     */
    getSQS(): MockClientResult<SQSClient>;
    /**
     * Gets or creates the SNS mock
     */
    getSNS(): MockClientResult<SNSClient>;
    /**
     * Gets or creates the Step Functions mock
     */
    getSFN(): MockClientResult<SFNClient>;
    /**
     * Gets or creates the SES mock
     */
    getSES(): MockClientResult<SESv2Client>;
    /**
     * Resets all active mocks
     */
    resetAll(): void;
    /**
     * Restores all mocks and destroys clients
     */
    restoreAll(): void;
}
/**
 * Creates a standard test setup with beforeEach/afterAll hooks
 * for use with Jest describe blocks
 */
export declare function setupAWSMocks(services: Array<'dynamodb' | 's3' | 'sqs' | 'sns' | 'sfn' | 'ses'>, options?: MockClientOptions): {
    manager: AWSMockManager;
    beforeEachHook: () => void;
    afterAllHook: () => void;
};
/**
 * Quick setup function that returns individual mocks for common patterns
 */
export declare function createTestMocks<T extends Array<'dynamodb' | 's3' | 'sqs' | 'sns' | 'sfn' | 'ses'>>(services: T, options?: MockClientOptions): {
    [K in T[number]]: K extends 'dynamodb' ? MockClientResult<DynamoDBClient> : K extends 's3' ? MockClientResult<S3Client> : K extends 'sqs' ? MockClientResult<SQSClient> : K extends 'sns' ? MockClientResult<SNSClient> : K extends 'sfn' ? MockClientResult<SFNClient> : K extends 'ses' ? MockClientResult<SESv2Client> : never;
} & {
    resetAll: () => void;
    restoreAll: () => void;
};
