/**
 * Resource Facade Types for Declarative Infrastructure API
 *
 * This module defines the interfaces for the Facade pattern,
 * providing a simplified API for common resource creation scenarios.
 *
 * @module declarative-api/facade.types
 */
import type { Stage } from './core.types';
import type { IResourceEntity } from './resource.types';
/**
 * Stage-specific defaults for resource configuration.
 *
 * Determines environment-specific settings based on deployment stage:
 * - dev: Minimal configuration, easy cleanup
 * - staging: Production-like with some relaxations
 * - prod: Full production configuration with all protections
 *
 * Validates: Requirements 12.2, 12.3
 */
export interface StageDefaults {
    /** Removal policy for CloudFormation (DESTROY, SNAPSHOT, RETAIN) */
    readonly removalPolicy: 'DESTROY' | 'SNAPSHOT' | 'RETAIN';
    /** Whether encryption is enabled by default */
    readonly encryption: boolean;
    /** Whether Point-in-Time Recovery is enabled (DynamoDB) */
    readonly pointInTimeRecovery: boolean;
    /** Whether logging is enabled */
    readonly logging: boolean;
    /** Whether versioning is enabled (S3) */
    readonly versioning: boolean;
    /** Whether DLQ is enabled by default (SQS) */
    readonly deadLetterQueue: boolean;
    /** Whether MFA is enabled by default (Cognito) */
    readonly mfaEnabled: boolean;
}
/**
 * Stage defaults configuration map.
 *
 * Provides sensible defaults for each deployment stage.
 */
export declare const STAGE_DEFAULTS: Readonly<Record<Stage, StageDefaults>>;
/**
 * Get stage defaults for a given stage.
 *
 * @param stage - The deployment stage
 * @returns The stage defaults
 */
export declare function getStageDefaults(stage: Stage): StageDefaults;
/**
 * Table resource entity interface for facade return type.
 */
export interface ITableResourceEntity extends IResourceEntity {
    readonly type: 'dynamodb:table';
    readonly tableName: string;
    readonly tableArn: string;
    readonly gsiNames: readonly string[];
    readonly hasStream: boolean;
}
/**
 * Queue resource entity interface for facade return type.
 */
export interface IQueueResourceEntity extends IResourceEntity {
    readonly type: 'sqs:queue';
    readonly queueUrl: string;
    readonly queueArn: string;
    readonly dlq?: IQueueResourceEntity;
    readonly isFifo: boolean;
}
/**
 * Topic resource entity interface for facade return type.
 */
export interface ITopicResourceEntity extends IResourceEntity {
    readonly type: 'sns:topic';
    readonly topicArn: string;
    readonly topicName: string;
    readonly isFifo: boolean;
}
/**
 * Bucket resource entity interface for facade return type.
 */
export interface IBucketResourceEntity extends IResourceEntity {
    readonly type: 's3:bucket';
    readonly bucketName: string;
    readonly bucketArn: string;
    readonly isWebsite: boolean;
    readonly isVersioned: boolean;
    readonly isEncrypted: boolean;
}
/**
 * Cognito resource entity interface for facade return type.
 */
export interface ICognitoResourceEntity extends IResourceEntity {
    readonly type: 'cognito:userpool';
    readonly userPoolId: string;
    readonly userPoolArn: string;
    readonly userPoolName: string;
    readonly clientId?: string;
}
/**
 * EventBus resource entity interface for facade return type.
 */
export interface IEventBusResourceEntity extends IResourceEntity {
    readonly type: 'events:eventbus';
    readonly eventBusName: string;
    readonly eventBusArn: string;
    readonly archiveEnabled: boolean;
}
/**
 * Standard table creation options.
 *
 * Simplified options for creating a DynamoDB table with best practices.
 */
export interface StandardTableOptions {
    /** Sort key attribute name (optional) */
    readonly sortKey?: string;
    /** Sort key type (default: 'S' for string) */
    readonly sortKeyType?: 'S' | 'N' | 'B';
    /** Partition key type (default: 'S' for string) */
    readonly partitionKeyType?: 'S' | 'N' | 'B';
    /** Enable DynamoDB Streams */
    readonly enableStream?: boolean;
    /** Stream view type */
    readonly streamViewType?: 'KEYS_ONLY' | 'NEW_IMAGE' | 'OLD_IMAGE' | 'NEW_AND_OLD_IMAGES';
    /** Enable Point-in-Time Recovery (overrides stage default) */
    readonly enablePitr?: boolean;
    /** Enable Time-to-Live */
    readonly enableTtl?: boolean;
    /** TTL attribute name */
    readonly ttlAttributeName?: string;
    /** Custom tags */
    readonly tags?: Readonly<Record<string, string>>;
}
/**
 * Standard queue creation options.
 *
 * Simplified options for creating an SQS queue with best practices.
 */
export interface StandardQueueOptions {
    /** Enable Dead Letter Queue (overrides stage default) */
    readonly enableDlq?: boolean;
    /** Maximum receive count before sending to DLQ */
    readonly maxReceiveCount?: number;
    /** Enable FIFO queue */
    readonly fifo?: boolean;
    /** Enable content-based deduplication for FIFO */
    readonly contentBasedDeduplication?: boolean;
    /** Visibility timeout in seconds */
    readonly visibilityTimeout?: number;
    /** Message retention period in seconds */
    readonly retentionPeriod?: number;
    /** Custom tags */
    readonly tags?: Readonly<Record<string, string>>;
}
/**
 * Standard topic creation options.
 *
 * Simplified options for creating an SNS topic with best practices.
 */
export interface StandardTopicOptions {
    /** Enable FIFO topic */
    readonly fifo?: boolean;
    /** Enable content-based deduplication for FIFO */
    readonly contentBasedDeduplication?: boolean;
    /** Custom tags */
    readonly tags?: Readonly<Record<string, string>>;
}
/**
 * Standard bucket creation options.
 *
 * Simplified options for creating an S3 bucket with best practices.
 */
export interface StandardBucketOptions {
    /** Enable versioning (overrides stage default) */
    readonly versioned?: boolean;
    /** Enable encryption (overrides stage default) */
    readonly encrypted?: boolean;
    /** Encryption type */
    readonly encryptionType?: 'S3_MANAGED' | 'KMS' | 'KMS_MANAGED';
    /** Enable public access */
    readonly publicAccess?: boolean;
    /** Enable website hosting */
    readonly websiteHosting?: boolean;
    /** Enable CORS */
    readonly cors?: boolean;
    /** Custom tags */
    readonly tags?: Readonly<Record<string, string>>;
}
/**
 * Standard user pool creation options.
 *
 * Simplified options for creating a Cognito User Pool with best practices.
 */
export interface StandardUserPoolOptions {
    /** Create a user pool client */
    readonly createClient?: boolean;
    /** Client name */
    readonly clientName?: string;
    /** Enable self sign-up */
    readonly selfSignUp?: boolean;
    /** MFA configuration (overrides stage default) */
    readonly mfa?: 'OFF' | 'OPTIONAL' | 'REQUIRED';
    /** Custom tags */
    readonly tags?: Readonly<Record<string, string>>;
}
/**
 * Standard event bus creation options.
 *
 * Simplified options for creating an EventBridge Event Bus with best practices.
 */
export interface StandardEventBusOptions {
    /** Archive events */
    readonly archiveEvents?: boolean;
    /** Archive retention days */
    readonly archiveRetentionDays?: number;
    /** Custom tags */
    readonly tags?: Readonly<Record<string, string>>;
}
/**
 * Resource Facade interface for simplified API.
 *
 * Provides high-level methods for creating resources with best practices
 * and stage-appropriate defaults. Hides CDK complexity while returning
 * full CDK constructs for further customization.
 *
 * Implements: Facade Pattern
 *
 * @example
 * ```typescript
 * const facade = new ResourceFacade(context);
 *
 * // Create a standard table with best practices
 * const usersTable = facade.createStandardTable('users', 'userId');
 *
 * // Create a standard queue with DLQ
 * const ordersQueue = facade.createStandardQueue('orders');
 *
 * // Create with custom overrides
 * const logsTable = facade.createStandardTable('logs', 'logId', {
 *   enableStream: true,
 *   enableTtl: true,
 *   ttlAttributeName: 'expiresAt',
 * });
 * ```
 *
 * Validates: Requirements 12.1, 12.2, 12.3, 12.4, 12.5, 12.6
 */
export interface IResourceFacade {
    /**
     * The current deployment stage.
     */
    readonly stage: Stage;
    /**
     * The service name for resource naming.
     */
    readonly serviceName: string;
    /**
     * Get the stage defaults being used.
     */
    readonly stageDefaults: StageDefaults;
    /**
     * Create a standard DynamoDB table with best practices.
     *
     * Applies stage-appropriate defaults:
     * - dev: PAY_PER_REQUEST, no PITR, DESTROY removal
     * - staging: PAY_PER_REQUEST, no PITR, encryption, SNAPSHOT removal
     * - prod: PAY_PER_REQUEST, PITR, encryption, RETAIN removal
     *
     * @param name - Table name (will be prefixed with service name and stage)
     * @param partitionKey - Partition key attribute name
     * @param options - Optional overrides for any setting
     * @returns The created table entity
     */
    createStandardTable(name: string, partitionKey: string, options?: StandardTableOptions): ITableResourceEntity;
    /**
     * Create a standard SQS queue with best practices.
     *
     * Applies stage-appropriate defaults:
     * - dev: No DLQ, standard queue
     * - staging: DLQ enabled, encryption
     * - prod: DLQ enabled, encryption, longer retention
     *
     * @param name - Queue name (will be prefixed with service name and stage)
     * @param options - Optional overrides for any setting
     * @returns The created queue entity
     */
    createStandardQueue(name: string, options?: StandardQueueOptions): IQueueResourceEntity;
    /**
     * Create a standard SNS topic with best practices.
     *
     * Applies stage-appropriate defaults:
     * - dev: Standard topic
     * - staging: Encryption enabled
     * - prod: Encryption enabled
     *
     * @param name - Topic name (will be prefixed with service name and stage)
     * @param options - Optional overrides for any setting
     * @returns The created topic entity
     */
    createStandardTopic(name: string, options?: StandardTopicOptions): ITopicResourceEntity;
    /**
     * Create a standard S3 bucket with best practices.
     *
     * Applies stage-appropriate defaults:
     * - dev: No versioning, no encryption, DESTROY removal
     * - staging: Versioning, encryption, SNAPSHOT removal
     * - prod: Versioning, encryption, RETAIN removal
     *
     * @param name - Bucket name (will be prefixed with service name and stage)
     * @param options - Optional overrides for any setting
     * @returns The created bucket entity
     */
    createStandardBucket(name: string, options?: StandardBucketOptions): IBucketResourceEntity;
    /**
     * Create a standard Cognito User Pool with best practices.
     *
     * Applies stage-appropriate defaults:
     * - dev: Self sign-up enabled, no MFA
     * - staging: Self sign-up enabled, optional MFA
     * - prod: Self sign-up enabled, required MFA
     *
     * @param name - User pool name (will be prefixed with service name and stage)
     * @param options - Optional overrides for any setting
     * @returns The created user pool entity
     */
    createStandardUserPool(name: string, options?: StandardUserPoolOptions): ICognitoResourceEntity;
    /**
     * Create a standard EventBridge Event Bus with best practices.
     *
     * Applies stage-appropriate defaults:
     * - dev: No archiving
     * - staging: Archiving enabled (30 days)
     * - prod: Archiving enabled (90 days)
     *
     * @param name - Event bus name (will be prefixed with service name and stage)
     * @param options - Optional overrides for any setting
     * @returns The created event bus entity
     */
    createStandardEventBus(name: string, options?: StandardEventBusOptions): IEventBusResourceEntity;
}
