/*
 * Copyright (c) 2024 Huawei Device Co., Ltd. All rights reserved
 * Use of this source code is governed by a MIT license that can be
 * found in the LICENSE file.
 */

import type { TurboModule } from "react-native/Libraries/TurboModule/RCTExport";
import { TurboModuleRegistry } from "react-native";

export interface Spec extends TurboModule {
  sync(): Promise<unknown>;
  isFailedUpdate(packageHash: string): Promise<boolean>;
  allow(): void;
  clearPendingRestart(): void;
  disallow(): void;
  restartApp(onlyIfUpdateIsPending: boolean): void;
  downloadUpdate(updatePackage: Object, notifyProgress: boolean): Promise<void>;
  getConfiguration(): Promise<Object>;
  getUpdateMetadata(updateState: number): Promise<object>;
  getNewStatusReport(): Promise<Object>;
  installUpdate(updatePackage: Object, installMode: number, minimumBackgroundDuration: number): Promise<object>;
  getLatestRollbackInfo(): Promise<string | null>;
  setLatestRollbackInfo(packageHash: string): Promise<string | null>;
  isFirstRun(packageHash: string): Promise<boolean | null>;
  notifyApplicationReady(): Promise<string | null>;
  recordStatusReported(statusReport: Object): void;
  saveStatusReportForRetry(statusReport: Object): void;
  downloadAndReplaceCurrentBundle(remoteBundleUrl: string): void;
  clearUpdates(): void;
}

export default TurboModuleRegistry.get<Spec>("RTNCodePush") as Spec | null;