import { Construct } from 'constructs';
import { LinuxFlavorType, CustomInstallStep } from '../vscode-server';
interface InstallerOptionsBase {
    /**
     * The ec2 instance id to install the ssm document on
     */
    readonly instanceId: string;
    /**
     * The name of the custom ssm document to install.
     *
     * @default the ssm document of the construct
     */
    readonly documentName?: string;
    /**
     * The name of the cloudwatch log group for the install logs
     *
     * @default /aws/ssm/${documentName}
     */
    readonly cloudWatchLogGroupName?: string;
    /**
     * The name of the user under which the vscode server runs
     */
    readonly vsCodeUser: string;
    /**
     * The password of the user under which the vscode server runs
     */
    readonly vsCodePassword: string;
    /**
     * The home folder of the user under which the vscode server runs
     */
    readonly homeFolder: string;
    /**
     * The base rest path vs code server will run
     *
     * @default app
     */
    readonly devServerBasePath?: string;
    /**
     * The port vscoder server will be served in the instance
     *
     * @default 8081
     */
    readonly devServerPort?: number;
    /**
     * The custom domain name for the VS Code server
     * Used to configure nginx server_name directive
     *
     * @default - uses *.cloudfront.net only
     */
    readonly customDomainName?: string;
    /**
     * The Linux flavor type for the instance
     */
    readonly linuxFlavorType: LinuxFlavorType;
    /**
     * Remote git repository URL to clone into the home folder.
     *
     * If provided, the repository will be cloned into the user's home folder during instance setup.
     * Useful for pre-populating workshop environments with starter code.
     *
     * @example 'https://github.com/aws-samples/my-workshop-repo.git'
     * @default - no repo cloned
     */
    readonly repoUrl?: string;
    /**
     * S3 path to a zip file containing assets to extract into the home folder.
     *
     * The zip contents will be extracted to the user's home folder and committed to git.
     * Use this to provide workshop materials, sample data, or configuration files.
     *
     * @example 'my-workshop-bucket/assets/workshop-materials.zip'
     * @default - no assets downloaded
     */
    readonly assetZipS3Path?: string;
    /**
     * S3 path to a zip file containing git branches to create in the home folder repository.
     *
     * Each top-level folder in the zip becomes a separate git branch with that folder's contents.
     * Ideal for creating step-by-step workshop branches (e.g., step-1, step-2, solution).
     *
     * @example 'my-workshop-bucket/branches/lab-branches.zip' (containing folders: step-1/, step-2/, solution/)
     * @default - no branches created
     */
    readonly branchZipS3Path?: string;
    /**
     * S3 path to a zip file containing multiple folders to create as separate git repositories.
     *
     * Each top-level folder in the zip becomes a separate subfolder in the parent directory,
     * initialized as its own git repository. Useful for multi-project workshops.
     *
     * @example 'my-workshop-bucket/folders/workshop-projects.zip' (containing folders: frontend/, backend/, infrastructure/)
     * @default - no folders created
     */
    readonly folderZipS3Path?: string;
    /**
     * Custom installation steps to extend the SSM document
     *
     * @default - no custom installation steps
     */
    readonly customInstallSteps?: CustomInstallStep[];
}
export interface InstallerOptions extends InstallerOptionsBase {
}
export declare abstract class Installer {
    static ubuntu(options: InstallerOptions): Installer;
    static amazonLinux2023(options: InstallerOptions): Installer;
    instanceId: string;
    documentName: string;
    cloudWatchLogGroupName: string;
    vsCodePassword: string;
    vsCodePasswordTest: string;
    /**
     * @internal
     */
    protected constructor();
    /**
     * @internal
     */
    abstract _bind(scope: Construct): any;
    /**
     * Creates the InstallCloudWatchAgent step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createInstallCloudWatchAgentStep;
    /**
     * Creates the ConfigureCloudWatchAgent step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createConfigureCloudWatchAgentStep;
    /**
     * Creates the UpdateProfile step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createUpdateProfileStep;
    /**
     * Creates the InstallAWSCLI step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createInstallAWSCLIStep;
    /**
     * Creates the CloneRepo step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createCloneRepoStep;
    /**
     * Creates the DownloadAssets step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createDownloadAssetsStep;
    /**
     * Creates the DownloadFolders step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createDownloadFoldersStep;
    /**
     * Creates the InstallCDK step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createInstallCDKStep;
    /**
     * Creates the InstallQCLI step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createInstallQCLIStep;
    /**
     * Creates the Installuv step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createInstalluvStep;
    /**
     * Creates the ConfigureCodeServer step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createConfigureCodeServerStep;
    /**
     * Creates the DownloadBranches step for SSM document
     * This step is identical for both Ubuntu and Amazon Linux
     */
    private createDownloadBranchesStep;
    private createSSMDocument;
}
export {};
