import DiagnosticList from './DiagnosticList';
export declare enum AppType {
    APP = "app",
    CLOCKFACE = "clockface",
    SERVICE = "service"
}
export interface Tile {
    name: string;
    uuid: string;
    buildTargets?: string[];
}
export declare const VALID_APP_TYPES: AppType[];
export declare const MAX_LENGTH_APP_CLUSTER_ID = 64;
export declare type LocalesConfig = {
    [locale: string]: {
        name: string;
    };
};
export interface BaseProjectConfiguration {
    appType: AppType;
    appDisplayName: string;
    appUUID: string;
    requestedPermissions: string[];
    i18n: LocalesConfig;
    defaultLanguage: string;
    buildTargets: string[];
    enableProposedAPI?: true;
    appClusterID?: string[];
    developerID?: string;
    companionDefaultWakeInterval?: number;
    heapSize?: number;
}
export interface AppProjectConfiguration extends BaseProjectConfiguration {
    appType: AppType.APP;
    wipeColor: string;
    iconFile: string;
    tiles?: Tile[];
}
export interface ClockProjectConfiguration extends BaseProjectConfiguration {
    appType: AppType.CLOCKFACE;
}
export interface ServiceProjectConfiguration extends BaseProjectConfiguration {
    appType: AppType.SERVICE;
}
export declare type ProjectConfiguration = AppProjectConfiguration | ClockProjectConfiguration | ServiceProjectConfiguration;
export default ProjectConfiguration;
export declare const MAX_DISPLAY_NAME_LENGTH = 30;
export declare enum Locales {
    'en-US' = "English (US)",
    'de-DE' = "German",
    'es-ES' = "Spanish",
    'fr-FR' = "French",
    'it-IT' = "Italian",
    'ja-JP' = "Japanese",
    'ko-KR' = "Korean",
    'nl-NL' = "Dutch",
    'sv-SE' = "Swedish",
    'zh-CN' = "Chinese (Simplified)",
    'zh-TW' = "Chinese (Traditional)",
    'pt-BR' = "Portuguese (Brazillian)",
    'id-ID' = "Indonesian (Bahasa)",
    'ro-RO' = "Romanian",
    'ru-RU' = "Russian",
    'pl-PL' = "Polish",
    'cs-CZ' = "Czech",
    'nb-NO' = "Norwegian (Bokm\u00E5l)",
    'da-DK' = "Danish (Denmark)",
    'hi-IN' = "Hindi (India)"
}
export declare enum Permission {
    ACCESS_ACTIVITY = "access_activity",
    ACCESS_AOD = "access_aod",
    ACCESS_APP_CLUSTER_STORAGE = "access_app_cluster_storage",
    ACCESS_CALENDAR = "access_calendar",
    ACCESS_EXERCISE = "access_exercise",
    ACCESS_HEART_RATE = "access_heart_rate",
    ACCESS_INTERNET = "access_internet",
    ACCESS_LOCATION = "access_location",
    ACCESS_SECURE_EXCHANGE = "access_secure_exchange",
    ACCESS_SLEEP = "access_sleep",
    ACCESS_USER_PROFILE = "access_user_profile",
    DIAGNOSTIC_INFO = "diagnostic_info",
    FITBIT_INTERNAL = "fitbit_internal",
    FITBIT_TOKEN = "fitbit_token",
    RUN_BACKGROUND = "run_background",
    EXTERNAL_APP_COMMUNICATION = "external_app_communication",
    MOBILE_NOTIFICATIONS = "mobile_notifications",
    DEVICE_NOTIFICATIONS = "device_notifications"
}
export declare function getAllPermissionTypes(options: {
    enableProposedAPI?: boolean;
    includeRestrictedPermissions?: boolean;
}): ({
    key: Permission;
    name: string;
    description: string;
    sdkVersion?: undefined;
} | {
    key: Permission;
    name: string;
    description: string;
    sdkVersion: string;
})[];
export declare function normalizeLocales(locales: LocalesConfig): LocalesConfig;
export declare function normalizeProjectConfig(config: any, defaults?: Partial<ProjectConfiguration>): ProjectConfiguration;
export declare function validateAppType(config: ProjectConfiguration): DiagnosticList;
export declare function validateDisplayName(name: string): string | true;
export declare function validateProjectDisplayName(config: ProjectConfiguration): DiagnosticList;
export declare function validateWipeColor(config: ProjectConfiguration): DiagnosticList;
export declare function validateRequestedPermissions({ enableProposedAPI, requestedPermissions, }: ProjectConfiguration): DiagnosticList;
export declare function validateBuildTarget({ buildTargets }: ProjectConfiguration, { hasNativeComponents }: {
    hasNativeComponents: boolean;
}): DiagnosticList;
export declare function validateLocaleDisplayName({ i18n }: ProjectConfiguration, localeKey: keyof typeof Locales): DiagnosticList;
export declare function validateLocaleDisplayNames(config: ProjectConfiguration): DiagnosticList;
export declare function validateSupportedLocales({ i18n }: ProjectConfiguration): DiagnosticList;
export declare function validateAppUUID({ appUUID }: ProjectConfiguration): DiagnosticList;
export declare function validateDefaultLanguage(config: ProjectConfiguration): DiagnosticList;
export declare function validateStorageGroup(config: ProjectConfiguration): DiagnosticList;
export declare function validateCompanionDefaultWakeInterval(config: ProjectConfiguration): DiagnosticList;
export declare function validateHeapSize(config: ProjectConfiguration): DiagnosticList;
export declare function validateTileComponentAppType(config: ProjectConfiguration): DiagnosticList;
export declare function validateTileBuildTarget(tile: Tile, config: AppProjectConfiguration): DiagnosticList;
export declare function validateTileUUID(tile: Tile, config: AppProjectConfiguration): DiagnosticList;
export declare function validateTileNativeComponent(hasNativeComponents: boolean): DiagnosticList;
export declare function validateTileName(tile: Tile, config: AppProjectConfiguration): DiagnosticList;
interface ValidationOptions {
    hasNativeComponents?: boolean;
}
export declare function validate(config: ProjectConfiguration, options?: ValidationOptions): DiagnosticList;
