import type Generator from 'yeoman-generator';
import type { AppWizard, Prompts as YeomanUiSteps } from '@sap-devx/yeoman-ui-types';
import type { YUIQuestion } from '@sap-ux/inquirer-common';
import type { TelemetryData } from '@sap-ux/fiori-generator-shared';
import type { AdaptationDescriptor, AdaptationProjectType, KeyUserChangeContent } from '@sap-ux/axios-extension';
import type { AttributesAnswers, ConfigAnswers, FlexLayer } from '@sap-ux/adp-tooling';
export interface AdpGeneratorOptions extends Generator.GeneratorOptions {
    /**
     * VSCode instance
     */
    vscode?: unknown;
    /**
     * Option to force the conflicter property of the yeoman environment (prevents additional prompt for overwriting files)
     */
    force?: boolean;
    /**
     * AppWizard instance
     */
    appWizard?: AppWizard;
    /**
     * Telemetry data to be send after deployment configuration has been added
     */
    telemetryData?: TelemetryData;
    /**
     * A boolean flag indicating whether node_modules should be installed after project generation.
     */
    shouldInstallDeps?: boolean;
}
/**
 * Enumeration of prompt names used in the configuration.
 */
export declare enum configPromptNames {
    system = "system",
    systemValidationCli = "systemValidationCli",
    username = "username",
    password = "password",
    storeCredentials = "storeCredentials",
    projectType = "projectType",
    projectTypeCli = "projectTypeCli",
    projectTypeClassicLabel = "projectTypeClassicLabel",
    application = "application",
    appValidationCli = "appValidationCli",
    fioriId = "fioriId",
    ach = "ach",
    shouldCreateExtProject = "shouldCreateExtProject"
}
/**
 * The question type specific to configuration prompts.
 */
export type ConfigQuestion = YUIQuestion<ConfigAnswers>;
/**
 * Options for individual prompts.
 */
export interface SystemPromptOptions {
    default?: string;
    hide?: boolean;
}
export interface CliValidationPromptOptions {
    hide?: boolean;
}
export interface UsernamePromptOptions {
    hide?: boolean;
}
export interface PasswordPromptOptions {
    hide?: boolean;
}
export interface StoreCredentialsPromptOptions {
    hide?: boolean;
}
export interface ProjectTypePromptOptions {
    default?: string;
    hide?: boolean;
}
export interface ProjectTypeClassicLabelPromptOptions {
    hide?: boolean;
}
export interface ApplicationPromptOptions {
    default?: string;
    hide?: boolean;
}
export interface FioriIdPromptOptions {
    hide?: boolean;
}
export interface AchPromptOptions {
    hide?: boolean;
}
export interface ShouldCreateExtProjectPromptOptions {
    hide?: boolean;
    isExtensibilityExtInstalled?: boolean;
}
/**
 * Options for the configuration inquirer & the prompts.
 */
export type ConfigPromptOptions = Partial<{
    [configPromptNames.system]: SystemPromptOptions;
    [configPromptNames.systemValidationCli]: CliValidationPromptOptions;
    [configPromptNames.username]: UsernamePromptOptions;
    [configPromptNames.password]: PasswordPromptOptions;
    [configPromptNames.storeCredentials]: StoreCredentialsPromptOptions;
    [configPromptNames.projectType]: ProjectTypePromptOptions;
    [configPromptNames.projectTypeCli]: CliValidationPromptOptions;
    [configPromptNames.projectTypeClassicLabel]: ProjectTypeClassicLabelPromptOptions;
    [configPromptNames.application]: ApplicationPromptOptions;
    [configPromptNames.appValidationCli]: CliValidationPromptOptions;
    [configPromptNames.fioriId]: FioriIdPromptOptions;
    [configPromptNames.ach]: AchPromptOptions;
    [configPromptNames.shouldCreateExtProject]: ShouldCreateExtProjectPromptOptions;
}>;
export declare enum attributePromptNames {
    projectName = "projectName",
    title = "title",
    namespace = "namespace",
    targetFolder = "targetFolder",
    ui5Version = "ui5Version",
    ui5ValidationCli = "ui5ValidationCli",
    enableTypeScript = "enableTypeScript",
    addDeployConfig = "addDeployConfig",
    addFlpConfig = "addFlpConfig",
    importKeyUserChanges = "importKeyUserChanges"
}
export type AttributesQuestion = YUIQuestion<AttributesAnswers>;
export interface ProjectNamePromptOptions {
    hide?: boolean;
}
export interface ApplicationTitlePromptOptions {
    default?: string;
    hide?: boolean;
}
export interface NamespacePromptOptions {
    default?: string;
    hide?: boolean;
}
export interface TargetFolderPromptOptions {
    default?: string;
    hide?: boolean;
}
export interface UI5VersionPromptOptions {
    default?: string;
    hide?: boolean;
}
export interface EnableTypeScriptPromptOptions {
    hide?: boolean;
}
export interface AddDeployConfigPromptOptions {
    hide?: boolean;
}
export interface AddFlpConfigPromptOptions {
    hide?: boolean;
    hasBaseAppInbounds?: boolean;
}
export interface ImportKeyUserChangesPromptOptions {
    hide?: boolean;
    default?: boolean;
}
export type AttributePromptOptions = Partial<{
    [attributePromptNames.projectName]: ProjectNamePromptOptions;
    [attributePromptNames.title]: ApplicationTitlePromptOptions;
    [attributePromptNames.namespace]: NamespacePromptOptions;
    [attributePromptNames.targetFolder]: TargetFolderPromptOptions;
    [attributePromptNames.ui5Version]: UI5VersionPromptOptions;
    [attributePromptNames.ui5ValidationCli]: CliValidationPromptOptions;
    [attributePromptNames.enableTypeScript]: EnableTypeScriptPromptOptions;
    [attributePromptNames.addDeployConfig]: AddDeployConfigPromptOptions;
    [attributePromptNames.addFlpConfig]: AddFlpConfigPromptOptions;
    [attributePromptNames.importKeyUserChanges]: ImportKeyUserChangesPromptOptions;
}>;
export type KeyUserImportQuestion = YUIQuestion<KeyUserImportAnswers>;
/**
 * Enumeration of prompt names used in the key-user import.
 */
export declare enum keyUserPromptNames {
    keyUserSystem = "keyUserSystem",
    keyUserUsername = "keyUserUsername",
    keyUserPassword = "keyUserPassword",
    keyUserAdaptation = "keyUserAdaptation"
}
export interface KeyUserSystemPromptOptions {
    default?: string;
    hide?: boolean;
}
export interface KeyUserUsernamePromptOptions {
    default?: string;
    hide?: boolean;
}
export interface KeyUserPasswordPromptOptions {
    default?: string;
    hide?: boolean;
}
export interface KeyUserAdaptationPromptOptions {
    default?: string;
    hide?: boolean;
}
/**
 * Options for the key-user import inquirer & the prompts.
 */
export type KeyUserImportPromptOptions = Partial<{
    [keyUserPromptNames.keyUserSystem]: KeyUserSystemPromptOptions;
    [keyUserPromptNames.keyUserUsername]: KeyUserUsernamePromptOptions;
    [keyUserPromptNames.keyUserPassword]: KeyUserPasswordPromptOptions;
    [keyUserPromptNames.keyUserAdaptation]: KeyUserAdaptationPromptOptions;
}>;
export interface KeyUserImportAnswers {
    keyUserSystem: string;
    keyUserUsername?: string;
    keyUserPassword?: string;
    keyUserAdaptation: AdaptationDescriptor;
}
export declare enum targetEnvPromptNames {
    targetEnv = "targetEnv"
}
export declare const TargetEnv: {
    readonly ABAP: "ABAP";
    readonly CF: "CF";
};
export type TargetEnv = (typeof TargetEnv)[keyof typeof TargetEnv];
export type TargetEnvAnswers = {
    targetEnv: TargetEnv;
};
export type TargetEnvQuestion = YUIQuestion<TargetEnvAnswers>;
export type ProjectLocationAnswers = {
    projectLocation: string;
};
export declare enum cfLoginPromptNames {
    cfLoggedInMainMessage = "cfLoggedInMainMessage",
    cfLoggedApiEndpointMessage = "cfLoggedApiEndpointMessage",
    cfLoggedInOrganizationMessage = "cfLoggedInOrganizationMessage",
    cfLoggedInSpaceMessage = "cfLoggedInSpaceMessage",
    cfLoggedInEndingMessage = "cfLoggedInEndingMessage",
    cfExternalLogin = "cfExternalLogin",
    cfExternalLoginSuccessMessage = "cfExternalLoginSuccessMessage"
}
export type CFLoginAnswers = {
    [K in cfLoginPromptNames]?: string;
};
export type CFLoginQuestion = YUIQuestion<CFLoginAnswers>;
export interface ExtensionProjectData {
    destination: {
        name: string;
        basUsage: string | undefined;
        host: string | undefined;
        sapClient: string | undefined;
    };
    username: string;
    password: string;
    applicationNS: string;
    applicationName: string;
    userUI5Ver: string;
    BSPUrl: string;
    namespace: string;
}
/**
 * An interface representing the json input used to store the complete adaptation project
 * generator configurations. The json is passed as an CLI argument.
 */
export interface JsonInput {
    system: string;
    client?: string;
    username?: string;
    password?: string;
    application: string;
    applicationTitle?: string;
    targetFolder?: string;
    projectName?: string;
    namespace?: string;
    projectType?: AdaptationProjectType;
    keyUserChanges?: KeyUserChangeContent[];
}
export declare enum SystemType {
    CLOUD_READY = "cloudReady",
    ON_PREM = "onPremise"
}
export interface OptionalPromptsConfig {
    projectType?: AdaptationProjectType;
    systemType?: SystemType;
    layer: FlexLayer;
    ui5Versions: string[];
    isVersionDetected: boolean;
    prompts: YeomanUiSteps;
    isCfEnv?: boolean;
}
//# sourceMappingURL=types.d.ts.map