/**
 * This file will be imported by desktop, so we make sure imports are carrying
 * as little extra code as possible with them.
 */
import { Environment } from '@standardnotes/snjs';

export interface ElectronDesktopCallbacks {
  desktop_updateAvailable(): void;
  desktop_windowGainedFocus(): void;
  desktop_windowLostFocus(): void;
  desktop_onComponentInstallationComplete(
    componentData: any,
    error: any
  ): Promise<void>;
  desktop_requestBackupFile(): Promise<string | undefined>;
  desktop_didBeginBackup(): void;
  desktop_didFinishBackup(success: boolean): void;
}

/** Platform-specific (i-e Electron/browser) behavior is handled by a Bridge object. */
export interface Bridge {
  readonly appVersion: string;
  environment: Environment;

  getKeychainValue(): Promise<unknown>;
  setKeychainValue(value: unknown): Promise<void>;
  clearKeychainValue(): Promise<void>;

  localBackupsCount(): Promise<number>;
  viewlocalBackups(): void;
  deleteLocalBackups(): Promise<void>;

  extensionsServerHost?: string;
  syncComponents(payloads: unknown[]): void;
  onMajorDataChange(): void;
  onInitialDataLoad(): void;
  onSignOut(): void;
  onSearch(text?: string): void;
  downloadBackup(): void | Promise<void>;
}
