import type { IResourceEntity, IResourceComposite, IResourceDecorator, IResourceBuilder, MessagingFactoryOptions, IMessagingResourceFactory, ILifecycleState, ResourceMetadata, IResourceVisitor, LifecycleStateType } from '../../../lib/runtime-web/types/declarative-api';
import type { IFrameworkResourceProvider } from '../../interfaces';
import { BaseResourceFactory, BaseResourceBuilder } from './base-factory';
/**
 * SQS Queue Resource Entity.
 */
export declare class SqsQueueEntity implements IResourceEntity {
    readonly id: string;
    readonly metadata: ResourceMetadata;
    readonly construct: unknown;
    readonly queueUrl: string;
    readonly queueArn: string;
    readonly dlq?: SqsQueueEntity | undefined;
    readonly isFifo: boolean;
    readonly type: "sqs:queue";
    private _state;
    constructor(id: string, metadata: ResourceMetadata, construct: unknown, queueUrl: string, queueArn: string, dlq?: SqsQueueEntity | undefined, isFifo?: boolean);
    get state(): ILifecycleState;
    transitionTo(targetState: LifecycleStateType): void;
    accept<T>(visitor: IResourceVisitor<T>): T;
}
/**
 * SNS Topic Resource Entity.
 */
export declare class SnsTopicEntity implements IResourceEntity {
    readonly id: string;
    readonly metadata: ResourceMetadata;
    readonly construct: unknown;
    readonly topicArn: string;
    readonly topicName: string;
    readonly isFifo: boolean;
    readonly type: "sns:topic";
    private _state;
    constructor(id: string, metadata: ResourceMetadata, construct: unknown, topicArn: string, topicName: string, isFifo?: boolean);
    get state(): ILifecycleState;
    transitionTo(targetState: LifecycleStateType): void;
    accept<T>(visitor: IResourceVisitor<T>): T;
}
/**
 * SQS Queue Builder.
 */
export declare class SqsQueueBuilder<TProps = unknown> extends BaseResourceBuilder<SqsQueueEntity, TProps> {
    private _enableDlq;
    private _maxReceiveCount;
    private _fifo;
    private _contentBasedDeduplication;
    /**
     * Enable Dead Letter Queue.
     */
    withDlq(maxReceiveCount?: number): this;
    /**
     * Enable FIFO queue.
     */
    withFifo(contentBasedDeduplication?: boolean): this;
    /**
     * Build the SQS queue entity.
     */
    build(): SqsQueueEntity;
}
/**
 * SNS Topic Builder.
 */
export declare class SnsTopicBuilder<TProps = unknown> extends BaseResourceBuilder<SnsTopicEntity, TProps> {
    private _fifo;
    private _contentBasedDeduplication;
    /**
     * Enable FIFO topic.
     */
    withFifo(contentBasedDeduplication?: boolean): this;
    /**
     * Build the SNS topic entity.
     */
    build(): SnsTopicEntity;
}
/**
 * Messaging Resource Factory.
 *
 * Factory for creating SQS queues and SNS topics.
 * Delegates resource creation to IFrameworkResourceProvider (RuntimeInfraStack).
 *
 * Validates: Requirements 2.2, 2.3, 5.2
 */
export declare class MessagingResourceFactory extends BaseResourceFactory<'messaging'> implements IMessagingResourceFactory {
    readonly familyType: "messaging";
    constructor(provider: IFrameworkResourceProvider, decorators?: readonly IResourceDecorator[]);
    /**
     * Create a resource with full CDK props.
     */
    create<TProps>(id: string, props: TProps, options?: MessagingFactoryOptions): IResourceComposite;
    /**
     * Get a builder for custom resource construction.
     */
    getBuilder<TProps>(id: string): IResourceBuilder<IResourceEntity, TProps>;
    /**
     * Check if this factory can create a resource of the given type.
     */
    canCreate(resourceType: string): boolean;
    /**
     * Get the supported resource types.
     */
    getSupportedTypes(): readonly string[];
    /**
     * Create an SQS queue.
     * Delegates to provider.createQueue() for framework integration.
     * Passes full props to provider without filtering (Requirement 7.5).
     *
     * @typeParam TProps - Queue props type
     * @param id - Unique identifier for the queue
     * @param props - Full CDK QueueProps (no restrictions)
     * @param options - Messaging-specific factory options
     * @returns The created queue entity or composite (if DLQ enabled)
     *
     * Validates: Requirements 7.5
     */
    createQueue<TProps>(id: string, props: TProps, options?: MessagingFactoryOptions): IResourceEntity | IResourceComposite;
    /**
     * Create an SNS topic.
     * Delegates to provider.createTopic() for framework integration.
     * Passes full props to provider without filtering (Requirement 7.5).
     *
     * @typeParam TProps - Topic props type
     * @param id - Unique identifier for the topic
     * @param props - Full CDK TopicProps (no restrictions)
     * @param options - Messaging-specific factory options
     * @returns The created topic entity
     *
     * Validates: Requirements 7.5
     */
    createTopic<TProps>(id: string, props: TProps, options?: MessagingFactoryOptions): IResourceEntity;
    /**
     * Create a queue subscribed to a topic.
     */
    createTopicWithQueue<TQueueProps, TTopicProps>(id: string, queueProps: TQueueProps, topicProps: TTopicProps, options?: MessagingFactoryOptions): IResourceComposite;
}
