export declare class Account {
    username: string;
    password: string;
    region: Regions;
    token?: Token;
    tokenStore?: ITokenStore;
    logger?: ILogger;
    constructor(username: string, password: string, region: Regions, tokenStore?: ITokenStore, logger?: ILogger);
    getToken(): Promise<Token>;
    private retrieveToken;
    private executeFetchWithRetry;
    private delay;
    private static getQueryStringValue;
    private static base64UrlEncode;
}

export declare class ConnectedDrive {
    serviceExecutionStatusCheckInterval: number;
    account: Account;
    logger?: ILogger;
    constructor(username: string, password: string, region: Regions, tokenStore?: ITokenStore, logger?: ILogger);
    getVehicles(): Promise<Vehicle[]>;
    getVehicleStatus(vin: string): Promise<VehicleStatus>;
    lockDoors(vin: string, waitExecution?: boolean): Promise<RemoteServiceResponse>;
    unlockDoors(vin: string, waitExecution?: boolean): Promise<RemoteServiceResponse>;
    startClimateControl(vin: string, waitExecution?: boolean): Promise<RemoteServiceResponse>;
    stopClimateControl(vin: string, waitExecution?: boolean): Promise<RemoteServiceResponse>;
    flashLights(vin: string, waitExecution?: boolean): Promise<RemoteServiceResponse>;
    blowHorn(vin: string, waitExecution?: boolean): Promise<RemoteServiceResponse>;
    private executeService;
    getServiceStatus(vin: string): Promise<ServiceStatus>;
    sendMessage(vin: string, subject: string, message: string): Promise<boolean>;
    request(url: string, isPost?: boolean, requestBody?: any): Promise<any>;
}

export declare class DetailedServiceStatus {
    constructor(response: {
        "rsStatus": RemoteServiceExecutionState;
        "rsDetailedStatus": RemoteServiceExecutionStateDetailed;
        "initiationError": "NO_ERROR" | string;
        "rsError": "NO_ERROR" | string;
        "creationTime": string;
        "initStatus": true;
    });
    status: RemoteServiceExecutionState;
    detailedStatus: RemoteServiceExecutionStateDetailed;
    initiationError: string;
    error: string;
    creationTime: Date;
    initStatus: boolean;
}

export declare interface ILogger {
    Log(level: LogLevel, message: string): void;
    LogTrace(message: string): void;
    LogDebug(message: string): void;
    LogInformation(message: string): void;
    LogWarning(message: string): void;
    LogError(message: string): void;
    LogCritical(message: string): void;
}

export declare interface ITokenStore {
    storeToken(token: Token): void;
    retrieveToken(): Token | undefined;
}

export declare abstract class LoggerBase implements ILogger {
    abstract Log(level: LogLevel, message: string): void;
    LogTrace(message: string): void;
    LogDebug(message: string): void;
    LogInformation(message: string): void;
    LogWarning(message: string): void;
    LogError(message: string): void;
    LogCritical(message: string): void;
}

export declare enum LogLevel {
    Trace = 0,
    Debug = 1,
    Information = 2,
    Warning = 3,
    Error = 4,
    Critical = 5
}

export declare enum Regions {
    NorthAmerica = "NorthAmerica",
    RestOfWorld = "RestOfWorld",
    China = "China"
}

export declare enum RemoteServiceExecutionState {
    INITIATED = "INITIATED",
    DELIVERED = "DELIVERED",
    STARTED = "STARTED",
    PENDING = "PENDING",
    RUNNING = "RUNNING",
    PROV_RUNNING = "PROV_RUNNING",
    EXECUTED = "EXECUTED",
    CANCELLED_WITH_ERROR = "CANCELLED_WITH_ERROR",
    UNKNOWN = "UNKNOWN"
}

export declare enum RemoteServiceExecutionStateDetailed {
    UNKNOWN = "UNKNOWN",
    OTHER_SERVICE_WITH_PROVISIONING_RUNNING = "OTHER_SERVICE_WITH_PROVISIONING_RUNNING",
    PROVISIONING_STARTED = "PROVISIONING_STARTED",
    SMS_DELIVERED_TO_GATEWAY = "SMS_DELIVERED_TO_GATEWAY",
    PROVISIONING_FINISHED = "PROVISIONING_FINISHED",
    SMS_DELIVERED_TO_VEHICLE = "SMS_DELIVERED_TO_VEHICLE",
    DLQ_MESSAGE_PROVIDED = "DLQ_MESSAGE_PROVIDED",
    DLQ_MESSAGE_FETCHED = "DLQ_MESSAGE_FETCHED",
    UPLINK_MESSAGE_ACK = "UPLINK_MESSAGE_ACK",
    DEPROVISIONING_STARTED = "DEPROVISIONING_STARTED",
    DEPROVISIONING_FINISHED = "DEPROVISIONING_FINISHED"
}

export declare class RemoteServiceResponse {
    constructor(response: {
        "eventId": {
            "eventId": string;
        };
        "vin": string;
        "creationTime": string;
    });
    eventId: string;
    vin: string;
    creationTime: Date;
}

export declare enum RemoteServices {
    /** climate */
    ClimateNow = "RCN",
    /** lock */
    LockDoors = "RDL",
    /** unlock */
    UnlockDoors = "RDU",
    /** horn */
    BlowHorn = "RHB",
    /** light */
    FlashLight = "RLF",
    /** Climate timer */
    ClimateTimer = "RCT",
    /** Charging profile */
    ChargingProfile = "RCP"
}

export declare class ServiceStatus {
    constructor(response: {
        "event": {
            "eventId": string;
            "rsType": RemoteServices;
            "rsTypeVersion": "v1";
            "vin": string;
            "userid": string;
            "creationTime": string;
            "lastUpdated": string;
            "rsEventStatus": RemoteServiceExecutionState;
            "requestParams": string;
            /** List of concluded events. The list is *not* sorted by time. */
            "actions": {
                "rsStatus": RemoteServiceExecutionState;
                "rsDetailedStatus": RemoteServiceExecutionStateDetailed;
                "initiationError": "NO_ERROR" | string;
                "rsError": "NO_ERROR" | string;
                "creationTime": string;
                "initStatus": true;
            }[];
            "uploads": [];
        };
    });
    eventId: string;
    serviceType: RemoteServices;
    vin: string;
    creationTime: Date;
    lastUpdated: Date;
    status: RemoteServiceExecutionState;
    requestParams: string;
    actions?: DetailedServiceStatus[];
}

export declare class Token {
    response: string;
    accessToken: string;
    refreshToken: string;
    validUntil: Date;
    constructor({ response, accessToken, refreshToken, validUntil }: {
        response: string;
        accessToken: string;
        refreshToken: string;
        validUntil: Date;
    });
}

export declare class Vehicle {
    vin?: string;
    model?: string;
    bodytype?: string;
    driveTrain?: string;
    fuelType?: string;
    color?: string;
    colorCode?: string;
    brand?: string;
    licensePlate?: string;
    yearOfConstruction?: number;
    statisticsCommunityEnabled?: boolean;
    statisticsAvailable?: boolean;
    hub?: string;
    hasAlarmSystem?: boolean;
    dealer?: any;
    breakdownNumber?: string;
    countryCode?: string;
    egoVehiclePath?: string;
    chargingUpdateMode?: string;
    steering?: string;
    vehicleFinderRestriction?: string;
    hmiVersion?: string;
    a4a?: string;
    vehicleFinder?: string;
    remote360?: string;
    hornBlow?: string;
    lightFlash?: string;
    doorLock?: string;
    doorUnlock?: string;
    climateControl?: string;
    climateNow?: string;
    climateNowRES?: string;
    climateControlRES?: string;
    chargingControl?: string;
    chargeNow?: string;
    sendPoi?: string;
    rangeMap?: string;
    lastDestinations?: string;
    intermodalRouting?: string;
    climateFunction?: string;
    onlineSearchMode?: string;
    onlineSearchProvider?: string;
    smartSolution?: string;
    carCloud?: string;
    supportedChargingModes?: [any];
    lscType?: string;
    ipa?: string;
    puStep?: string;
    remoteSoftwareUpgrade?: string;
}

export declare class VehicleStatus {
    unitOfLength?: string;
    remainingRange?: number;
    updateTimeConverted?: Date;
    doorDriverRear?: string;
    doorPassengerRear?: string;
    beRemainingRangeFuelKm?: number;
    doorDriverFront?: string;
    hoodState?: string;
    chargingStatus?: string;
    kombiCurrentRemainingRangeFuel?: number;
    windowDriverRear?: string;
    beRemainingRangeElectricKm?: number;
    mileage?: number;
    unitOfEnergy?: string;
    overallEnergyConsumption?: number;
    beRemainingRangeElectric?: number;
    socHvPercent?: number;
    singleImmediateCharging?: boolean;
    updateTimeConvertedTime?: Date;
    connectorStatus?: string;
    chargingHVStatus?: string;
    chargingLevelHv?: number;
    unitOfCombustionConsumption?: string;
    gpsLat?: number;
    windowDriverFront?: string;
    gpsLng?: number;
    conditionBasedServices?: string;
    windowPassengerFront?: string;
    windowPassengerRear?: string;
    lastChargingEndReason?: string;
    updateTimeConvertedDate?: Date;
    beRemainingRangeFuelMile?: number;
    beRemainingRangeFuel?: number;
    doorPassengerFront?: string;
    beChargingLevelHv?: number;
    updateTimeConvertedTimestamp?: number;
    remainingFuel?: number;
    heading?: number;
    lscTrigger?: string;
    lightsParking?: string;
    doorLockState?: string;
    updateTime?: Date;
    beEnergyLevelHv?: number;
    trunkState?: string;
    batterySizeMax?: number;
    beRemainingRangeElectricMile?: number;
    chargingConnectionType?: string;
    unitOfElectricConsumption?: string;
    lastUpdateReason?: string;
    constructor(response: {
        attributesMap: {
            unitOfLength: string;
            remaining_range: string;
            updateTime_converted: string;
            door_driver_rear: string;
            door_passenger_rear: string;
            beRemainingRangeFuelKm: string;
            door_driver_front: string;
            hood_state: string;
            charging_status: string;
            kombi_current_remaining_range_fuel: string;
            window_driver_rear: string;
            beRemainingRangeElectricKm: string;
            mileage: string;
            unitOfEnergy: string;
            overall_energy_consumption: string;
            beRemainingRangeElectric: string;
            soc_hv_percent: string;
            single_immediate_charging: string;
            updateTime_converted_time: string;
            connectorStatus: string;
            chargingHVStatus: string;
            chargingLevelHv: string;
            unitOfCombustionConsumption: string;
            gps_lat: string;
            window_driver_front: string;
            gps_lng: string;
            condition_based_services: string;
            window_passenger_front: string;
            window_passenger_rear: string;
            lastChargingEndReason: string;
            updateTime_converted_date: string;
            beRemainingRangeFuelMile: string;
            beRemainingRangeFuel: string;
            door_passenger_front: string;
            beChargingLevelHv: string;
            updateTime_converted_timestamp: string;
            remaining_fuel: string;
            heading: string;
            lsc_trigger: string;
            lights_parking: string;
            door_lock_state: string;
            updateTime: string;
            beEnergyLevelHv: string;
            trunk_state: string;
            battery_size_max: string;
            beRemainingRangeElectricMile: string;
            charging_connection_type: string;
            unitOfElectricConsumption: string;
            lastUpdateReason: string;
        };
    });
    toInteger(string: string): number | undefined;
    toFloat(string: string): number | undefined;
}

export { }
