import type { IResourceEntity, IResourceComposite, IResourceDecorator, IResourceBuilder, StorageFactoryOptions, IStorageResourceFactory, ILifecycleState, ResourceMetadata, IResourceVisitor, LifecycleStateType } from '../../../lib/runtime-web/types/declarative-api';
import type { IFrameworkResourceProvider } from '../../interfaces';
import { BaseResourceFactory, BaseResourceBuilder } from './base-factory';
/**
 * S3 Bucket Resource Entity.
 */
export declare class S3BucketEntity implements IResourceEntity {
    readonly id: string;
    readonly metadata: ResourceMetadata;
    readonly construct: unknown;
    readonly bucketName: string;
    readonly bucketArn: string;
    readonly isWebsite: boolean;
    readonly isVersioned: boolean;
    readonly isEncrypted: boolean;
    readonly type: "s3:bucket";
    private _state;
    constructor(id: string, metadata: ResourceMetadata, construct: unknown, bucketName: string, bucketArn: string, isWebsite?: boolean, isVersioned?: boolean, isEncrypted?: boolean);
    get state(): ILifecycleState;
    transitionTo(targetState: LifecycleStateType): void;
    accept<T>(visitor: IResourceVisitor<T>): T;
}
/**
 * S3 Bucket Builder.
 */
export declare class S3BucketBuilder<TProps = unknown> extends BaseResourceBuilder<S3BucketEntity, TProps> {
    private _versioned;
    private _encrypted;
    private _encryptionType;
    private _publicAccess;
    private _websiteHosting;
    private _cors;
    /**
     * Enable versioning.
     */
    withVersioning(enabled?: boolean): this;
    /**
     * Enable encryption.
     */
    withEncryption(type?: 'S3_MANAGED' | 'KMS' | 'KMS_MANAGED'): this;
    /**
     * Enable public access.
     */
    withPublicAccess(enabled?: boolean): this;
    /**
     * Enable website hosting.
     */
    withWebsiteHosting(enabled?: boolean): this;
    /**
     * Enable CORS.
     */
    withCors(enabled?: boolean): this;
    /**
     * Build the S3 bucket entity.
     */
    build(): S3BucketEntity;
}
/**
 * Storage Resource Factory.
 *
 * Factory for creating S3 buckets.
 * Delegates resource creation to IFrameworkResourceProvider (RuntimeInfraStack).
 *
 * Validates: Requirements 2.2, 2.3, 5.3
 */
export declare class StorageResourceFactory extends BaseResourceFactory<'storage'> implements IStorageResourceFactory {
    readonly familyType: "storage";
    constructor(provider: IFrameworkResourceProvider, decorators?: readonly IResourceDecorator[]);
    /**
     * Create a resource with full CDK props.
     */
    create<TProps>(id: string, props: TProps, options?: StorageFactoryOptions): 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 S3 bucket.
     * Delegates to provider.createBucket() for framework integration.
     * Passes full props to provider without filtering (Requirement 7.5).
     *
     * @typeParam TProps - Bucket props type (unconstrained for flexibility)
     * @param id - Unique identifier for the bucket
     * @param props - Full CDK BucketProps (no restrictions)
     * @param options - Storage-specific factory options
     * @returns The created bucket entity
     *
     * Validates: Requirements 7.5
     */
    createBucket<TProps>(id: string, props: TProps, options?: StorageFactoryOptions): IResourceEntity;
    /**
     * Create a website bucket.
     */
    createWebsiteBucket<TProps>(id: string, props: TProps, options?: StorageFactoryOptions): IResourceEntity;
}
