export interface IApp {
    isWeb: boolean;

    on(channel: string, callback: any): void;

    getInitialData(): Promise<any>;
    getDeviceId(): Promise<string | null>;
    getDeviceInfos(): Promise<DeviceInfos>;
    download(options: { url: string, filename?: string, directory?: string, isDefaultFilename?: boolean, headers?: any }): Promise<string | null>;
    shareFile(path: string): Promise<void>;
    openFile(path: string): Promise<void>;
    openUrl(url: string | URL | undefined, name?: string): null;
    load(url: string): Promise<void>;
    copy(data: string): Promise<void>;
    paste(): Promise<string>;
    share(data: any): Promise<void>;
    setAppBadge(data: number | undefined): Promise<void>;
    clearAppBadge(): Promise<void>;
    vibrate(data: any): boolean;
    printHtml(content: string): Promise<void>;
    print(): Promise<void>;
    hasPermission(permissionDesc: PermissionDescriptor): Promise<PermissionStatus>;
    isLocationGranted(): Promise<boolean>;
    getCurrentPosition(options: PositionOptions | undefined): Promise<any>;
    watchPosition(enable: boolean, options?: PositionOptions | undefined): Promise<any>;
    isNotificationGranted(): Promise<boolean>;
    requestNotificationPermission(): Promise<boolean>;
    getRegistrationToken(): Promise<string>;
    canCheckBiometrics(): Promise<boolean>;
    getAvailableBiometrics(): Promise<Array<string>>;
    authenticate(message: string, options?: any): Promise<boolean>;
    openScanner(): Promise<void>;
    closeScanner(): Promise<void>;
    scanBarcode(): Promise<string>;
    alert(message?: string): Promise<void>;
    confirm(message?: string): Promise<boolean>;
    setShortcutItems(items: { type: string, title: string, icon: string }[]): Promise<void>;
    isNfcAvailable(): Promise<boolean>;
    readNfc(message?: string): Promise<any>;
    launchUrl(url?: string): Promise<any>;
    updateAppStyle(params: AppStyleParams): Promise<any>;
    select(params?: SelectFileParams): Promise<DataTransfer>
}

export interface AppStyleParams {
    backgroundColor?: number;
    appBarColor?: number;
    navBarColor?: number;
    appBarOffset?: boolean;
    navBarOffset?: boolean;
    keyboardResize?: boolean;
}

export interface SelectFileParams {
    type?: 'file' | 'capture' | 'scan';
    multiple?: boolean;
    accept?: string[];
}

export interface DeviceInfos {
    id: string;
    os: string;
    name: string;
    version: string;
    model: string;
    appVersion: string;
    firebaseId: string;
    registrationToken: string;
}

export interface LocationData {
    latitude: number;
    longitude: number;
    accuracy: number;
    altitude: number;
    speed: number;
    speedAccuracy: number;
    heading: number;
    time: number;
    isMock: boolean;
    verticalAccuracy: number;
    headingAccuracy: number;
    elapsedRealtimeNanos: number;
    elapsedRealtimeUncertaintyNanos: number;
    satelliteNumber: number;
    provider: string;
}
