import { HotUpdaterConfigOptions } from "@hot-updater/cli-tools";
import { ConfigInput, Platform } from "@hot-updater/plugin-core";

//#region src/utils/fingerprint/common.d.ts
type FingerprintSource = {
  type: "file" | "dir";
  filePath: string;
  reasons: string[];
  overrideHashKey?: string;
  hash: string | null;
  debugInfo?: any;
} | {
  type: "contents";
  id: string;
  contents: string | Buffer;
  reasons: string[];
  hash: string | null;
  debugInfo?: any;
};
type FingerprintResult = {
  hash: string;
  sources: FingerprintSource[];
};
//#endregion
//#region src/utils/fingerprint/index.d.ts
declare const generateFingerprints: () => Promise<{
  ios: FingerprintResult;
  android: FingerprintResult;
}>;
declare const generateFingerprint: (platform: "ios" | "android") => Promise<FingerprintResult>;
declare const createAndInjectFingerprintFiles: ({
  platform
}?: {
  platform?: Platform;
}) => Promise<{
  fingerprint: {
    ios: FingerprintResult;
    android: FingerprintResult;
  };
  androidPaths: string[];
  iosPaths: string[];
}>;
declare const createFingerprintJSON: (fingerprint: {
  ios: FingerprintResult;
  android: FingerprintResult;
}) => Promise<{
  ios: FingerprintResult;
  android: FingerprintResult;
}>;
declare const readLocalFingerprint: () => Promise<{
  ios: FingerprintResult | null;
  android: FingerprintResult | null;
} | null>;
//#endregion
//#region src/utils/signing/keyGeneration.d.ts
/**
 * Load private key from PEM file.
 * @param privateKeyPath Path to private key file
 * @returns Private key in PEM format
 * @throws Error if file not found or invalid format
 */
declare function loadPrivateKey(privateKeyPath: string): Promise<string>;
/**
 * Extract public key from private key.
 * @param privateKeyPEM Private key in PEM format
 * @returns Public key in PEM format
 */
declare function getPublicKeyFromPrivate(privateKeyPEM: string): string;
//#endregion
//#region src/config.d.ts
declare const defineConfig: (config: ConfigInput | ((options: HotUpdaterConfigOptions) => ConfigInput)) => ConfigInput | ((options: HotUpdaterConfigOptions) => ConfigInput);
//#endregion
export { createAndInjectFingerprintFiles, createFingerprintJSON, defineConfig, generateFingerprint, generateFingerprints, getPublicKeyFromPrivate, loadPrivateKey, readLocalFingerprint };