import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
import { S3StaticWebsiteOrigin } from 'aws-cdk-lib/aws-cloudfront-origins';
import * as iam from 'aws-cdk-lib/aws-iam';
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
import { RuntimeInfraResourceOptions, RuntimeInfraResources } from './interfaces';
/**
 * Properties for the RuntimeInfraStack
 */
export interface RuntimeInfraStackProps extends cdk.StackProps {
    /**
     * Deployment stage (dev, staging, prod)
     */
    stage: 'dev' | 'staging' | 'prod';
    /**
     * Service name for resource naming
     */
    serviceName: string;
    /**
     * Enable SEO features with DynamoDB
     * @default false
     */
    enableSeo?: boolean;
}
/**
 * RuntimeInfraStack - Infrastructure resources for Runtime serverless rendering application
 *
 * This construct creates slow-changing infrastructure resources:
 * - S3 bucket for static assets and cache
 * - DynamoDB table for SEO metadata (optional)
 * - CloudFront distribution for global content delivery
 * - IAM role for Lambda execution
 *
 * These resources are deployed separately from runtime resources (Lambda functions)
 * to enable faster deployments and better separation of concerns.
 *
 * The stack exports CloudFormation outputs that are consumed by RuntimeStack
 * via cross-stack references.
 *
 * @example Basic usage
 * ```typescript
 * import { RuntimeInfraStack } from '@worktif/runtime/infra';
 *
 * const infraStack = new RuntimeInfraStack(app, 'serviceName-RuntimeInfra-dev', {
 *   stage: 'dev',
 *   serviceName: 'my-app',
 *   enableSeo: true,
 * });
 * ```
 *
 * @todo: const infraStack = new RuntimeInfraStack(app, `${serviceName}-${RuntimeStacks.Infra}-${stage}`, {
 *        include function to runtime stack name composition: runtimeStack({ name: '', type: RuntimeStacks.Infra, stage: stage }}
 *        This function MUST be tested because we have CDK Stack constructor argument restrictions
 */
export declare class RuntimeInfraStack extends cdk.Stack implements RuntimeInfraResources {
    /**
     * S3 bucket for static assets and serverless rendering cross-domain cache
     */
    readonly staticBucket: s3.Bucket;
    /**
     * CloudFront distribution for content delivery
     */
    /**
     * IAM role for Lambda execution
     */
    readonly lambdaRole: iam.Role;
    /**
     * DynamoDB table for SEO metadata storage (optional)
     */
    readonly seoTable?: dynamodb.Table;
    /**
     * Represents the configuration for an Amazon S3 bucket set up as a static website origin.
     * This configuration is used to specify the origin details when integrating an S3 static website with
     * services like content delivery networks or other systems that require an origin source.
     *
     * The `s3Origin` field contains information about the S3 bucket, including its domain name and
     * additional properties required for integrating or routing requests.
     *
     * Type: S3StaticWebsiteOrigin
     */
    s3Origin: S3StaticWebsiteOrigin;
    constructor(scope: Construct, id: string, props: RuntimeInfraStackProps);
    /**
     * Creates S3 bucket for static assets and serverless rendering cross-domain cache
     *
     * @param props - Stack properties
     * @returns S3 Bucket instance
     * @protected
     */
    protected createS3Bucket(props: RuntimeInfraStackProps): s3.Bucket;
    /**
     * Creates IAM role for Lambda execution with least privilege
     *
     * @param props - Stack properties
     * @returns IAM Role instance
     * @protected
     */
    protected createLambdaRole(props: RuntimeInfraStackProps): iam.Role;
    /**
     * Creates DynamoDB table for SEO metadata storage
     *
     * @param props - Stack properties
     * @returns DynamoDB Table instance or undefined
     * @protected
     */
    protected createSeoTable(props: RuntimeInfraStackProps): dynamodb.Table | undefined;
    /**
     * Creates CloudFormation outputs for cross-stack references
     *
     * @param props - Stack properties
     * @protected
     */
    protected createOutputs(props: RuntimeInfraStackProps): void;
    /**
     * Generates a signature for the provided region by extracting the first character of each segment in the region string, delimited by hyphens.
     *
     * @param {string} region - The region string to generate the signature from. It is expected to be a hyphen-separated string.
     * @return {string} The generated region signature, formed by concatenating the first character of each valid segment. Returns an empty string if the input is invalid or empty.
     */
    private getRegionSignature;
    /**
     * Generates a resource name by concatenating service name, resource name,
     * simplified region, and stage with hyphens as separators.
     *
     * @param {Object} params - An object containing the required parameters.
     * @param {string} params.name - The name of the resource.
     * @param {string} params.serviceName - The name of the service associated with the resource.
     * @param {string} params.regionSimplified - The simplified region identifier.
     * @param {string} params.stage - The deployment stage of the resource.
     * @returns {string} The concatenated resource name.
     */
    resourceName({ name, serviceName, stage, region }: RuntimeInfraResourceOptions): string;
}
