import URL from 'url-parse';
import Analytics from './modules/analytics';
import Core from './modules/core';
import Events from './modules/events';
import Media from './modules/media';
import Media2 from './modules/media2';
import Ptz from './modules/ptz';
/**
 * Wrapper class for all onvif modules to manage an Onvif device (camera).
 */
export default class Camera {
    core?: Core;
    analytics?: Analytics;
    events?: Events;
    media?: Media;
    media2?: Media2;
    ptz?: Ptz;
    rootPath: any;
    serviceAddress: URL;
    timeDiff: number;
    address: any;
    port: any;
    username: any;
    password: any;
    deviceInformation: any;
    profileList: any[];
    defaultProfile: any;
    /**
     * Add a module to Camera. The available modules are:
     * <ul>
     * <li>analytics - automatically added based on capabilities</li>
     * <li>core - automatically added</li>
     * <li>events - automatically added based on capabilities</li>
     * <li>media - automatically added based on capabilities</li>
     * <li>media2</li>
     * <li>ptz - automatically added based on capabilities</li>
     * </ul>
     * @param {string} name The name of the module.
     */
    add(name: string): Promise<void>;
    /**
     * Connect to the specified camera.
     * @param address The camera's address
     * @param port Optional port (80 used if this is null)
     * @param username The username for the account on the camera. This is optional if your camera does not require a username.
     * @param password The password for the account on the camera. This is optional if your camera does not require a password.
     * @param servicePath The service path for the camera. If null or 'undefined' the default path according to the ONVIF spec will be used.
     */
    connect(address: string, port?: number, username?: string, password?: string, servicePath?: string): Promise<unknown>;
    /**
     * Change or remove authentication.
     * @param username The username for the account on the camera. This is optional if your camera does not require a username.
     * @param password The password for the account on the camera. This is optional if your camera does not require a password.
     */
    setAuth(username?: string, password?: string): void;
    /**
     * Returns the ONVIF device's informaton. Available only after connection.
     */
    getInformation(): any;
    /**
     * Returns the default profile that will be used when one is not supplied to functions that require it. Available after connection.
     */
    getDefaultProfile(): any;
    coreGetSystemDateAndTime(): Promise<void>;
    coreGetServices(): Promise<void>;
    checkForProxy(service: {
        XAddr: string;
    }): void;
    coreGetCapabilities(): Promise<void>;
    coreGetDeviceInformation(): Promise<void>;
    coreGetScopes(): Promise<void>;
    mediaGetProfiles(): Promise<void>;
    parseProfiles(profiles: any | any[]): any[];
    /**
     * Returns an array of profiles. Available after connection.
     * The profiles will contain media stream URIs and snapshot URIs for each profile.
     */
    getProfiles(): any[];
    mediaGetStreamURI(): Promise<void>;
    mediaGetSnapshotUri(): Promise<void>;
}
