export interface StackParameter {
    ParameterKey: string;
    ParameterValue: string;
    UsePreviousValue?: boolean;
}
export interface StackTag {
    Key: string;
    Value: string;
}
export interface CreateStackOptions {
    stackName: string;
    templateBody?: string;
    templateUrl?: string;
    parameters?: StackParameter[];
    capabilities?: string[];
    roleArn?: string;
    tags?: StackTag[];
    timeoutInMinutes?: number;
    onFailure?: 'DO_NOTHING' | 'ROLLBACK' | 'DELETE';
}
export interface UpdateStackOptions {
    stackName: string;
    templateBody?: string;
    templateUrl?: string;
    parameters?: StackParameter[];
    capabilities?: string[];
    roleArn?: string;
    tags?: StackTag[];
}
export interface DescribeStacksOptions {
    stackName?: string;
}
export interface StackEvent {
    Timestamp: string;
    ResourceType: string;
    LogicalResourceId: string;
    ResourceStatus: string;
    ResourceStatusReason?: string;
}
export interface Stack {
    StackId: string;
    StackName: string;
    StackStatus: string;
    StackStatusReason?: string;
    CreationTime: string;
    LastUpdatedTime?: string;
    Parameters?: StackParameter[];
    Outputs?: Array<{
        OutputKey: string;
        OutputValue: string;
        Description?: string;
        ExportName?: string;
    }>;
    Tags?: StackTag[];
}
/**
 * CloudFormation stack management using direct API calls
 */
export declare class CloudFormationClient {
    private client;
    private region;
    constructor(region?: string, profile?: string);
    /**
     * Create a new CloudFormation stack
     */
    createStack(options: CreateStackOptions): Promise<{
        StackId: string;
    }>;
    /**
     * Update an existing CloudFormation stack
     */
    updateStack(options: UpdateStackOptions): Promise<{
        StackId: string;
    }>;
    /**
     * Delete a CloudFormation stack
     */
    deleteStack(stackName: string, roleArn?: string, retainResources?: string[]): Promise<void>;
    /**
     * Describe CloudFormation stacks
     */
    describeStacks(options?: DescribeStacksOptions): Promise<{
        Stacks: Stack[];
    }>;
    /**
     * Get stack events
     */
    describeStackEvents(stackName: string): Promise<{
        StackEvents: StackEvent[];
    }>;
    /**
     * List stack resources
     */
    listStackResources(stackName: string): Promise<{
        StackResourceSummaries: any[];
    }>;
    /**
     * Wait for stack to reach a specific status
     */
    waitForStack(stackName: string, waitType: 'stack-create-complete' | 'stack-update-complete' | 'stack-delete-complete'): Promise<void>;
    /**
     * Validate CloudFormation template
     */
    validateTemplate(templateBody: string): Promise<any>;
    /**
     * List all stacks
     */
    listStacks(statusFilter?: string[]): Promise<{
        StackSummaries: Array<{
            StackId: string;
            StackName: string;
            TemplateDescription?: string;
            CreationTime: string;
            LastUpdatedTime?: string;
            DeletionTime?: string;
            StackStatus: string;
        }>;
    }>;
    /**
     * Create change set (for preview before updating)
     */
    createChangeSet(options: {
        stackName: string;
        changeSetName: string;
        templateBody?: string;
        templateUrl?: string;
        parameters?: StackParameter[];
        capabilities?: string[];
        changeSetType?: 'CREATE' | 'UPDATE';
    }): Promise<{
        Id: string;
        StackId: string;
    }>;
    /**
     * Describe change set
     */
    describeChangeSet(stackName: string, changeSetName: string): Promise<any>;
    /**
     * Execute change set
     */
    executeChangeSet(stackName: string, changeSetName: string): Promise<void>;
    /**
     * Delete change set
     */
    deleteChangeSet(stackName: string, changeSetName: string): Promise<void>;
    /**
     * Get stack outputs as key-value pairs
     */
    getStackOutputs(stackName: string): Promise<Record<string, string>>;
    /**
     * Get stack template
     */
    getTemplate(stackName: string): Promise<{
        TemplateBody: string;
    }>;
    /**
     * Parse stacks response
     */
    private parseStacksResponse;
    /**
     * Parse stack events response
     */
    private parseStackEvents;
    /**
     * Wait for stack with real-time progress output (CDK-style)
     */
    waitForStackWithProgress(stackName: string, waitType: 'stack-create-complete' | 'stack-update-complete' | 'stack-delete-complete', onProgress?: (event: {
        resourceId: string;
        resourceType: string;
        status: string;
        reason?: string;
        timestamp: string;
    }) => void): Promise<void>;
    /**
     * Wait for stack operation to complete (create, update, or delete)
     * Returns a result object with success status
     */
    waitForStackComplete(stackName: string, maxAttempts?: number, delayMs?: number): Promise<{
        success: boolean;
        status: string;
        reason?: string;
    }>;
}
