import { KmsCreateKeyOptions, KmsCreateKeyTypeAssymetric } from "../../../kms/options/KmsCreateKeyOptions.js";
import { XOR } from "../../../../types.js";
import { DidDocument } from "../../domain/DidDocument.js";
import { DidRegistrar } from "../../domain/DidRegistrar.js";
import { DidDocumentKey } from "../../DidsApiOptions.js";
import { DidCreateOptions, DidCreateResult, DidDeactivateResult, DidUpdateResult } from "../../types.js";
import { PeerDidNumAlgo } from "./didPeer.js";
import { AgentContext } from "../../../../agent/context/AgentContext.js";

//#region src/modules/dids/methods/peer/PeerDidRegistrar.d.ts
declare class PeerDidRegistrar implements DidRegistrar {
  readonly supportedMethods: string[];
  create(agentContext: AgentContext, options: PeerDidNumAlgo0CreateOptions | PeerDidNumAlgo1CreateOptions | PeerDidNumAlgo2CreateOptions | PeerDidNumAlgo4CreateOptions): Promise<DidCreateResult>;
  update(): Promise<DidUpdateResult>;
  deactivate(): Promise<DidDeactivateResult>;
}
type PeerDidCreateOptions = PeerDidNumAlgo0CreateOptions | PeerDidNumAlgo1CreateOptions | PeerDidNumAlgo2CreateOptions | PeerDidNumAlgo4CreateOptions;
interface PeerDidNumAlgo0CreateOptions extends DidCreateOptions {
  method: 'peer';
  did?: never;
  didDocument?: never;
  options: {
    numAlgo: PeerDidNumAlgo.InceptionKeyWithoutDoc;
  } & XOR<{
    createKey: KmsCreateKeyOptions<KmsCreateKeyTypeAssymetric>;
  }, {
    keyId: string;
  }>;
  secret?: never;
}
interface PeerDidNumAlgo1CreateOptions extends DidCreateOptions {
  method: 'peer';
  did?: never;
  didDocument: DidDocument;
  options: {
    numAlgo: PeerDidNumAlgo.GenesisDoc;
    /**
     * The linking between the did document keys and the kms keys. If you want to use
     * the DID within Credo you MUST add the key here. All keys must be present in the did
     * document, but not all did document keys must be present in this array, to allow for keys
     * that are not controleld by this agent.
     */
    keys: DidDocumentKey[];
  };
  secret?: never;
}
interface PeerDidNumAlgo2CreateOptions extends DidCreateOptions {
  method: 'peer';
  did?: never;
  didDocument: DidDocument;
  options: {
    numAlgo: PeerDidNumAlgo.MultipleInceptionKeyWithoutDoc;
    /**
     * The linking between the did document keys and the kms keys. If you want to use
     * the DID within Credo you MUST add the key here. All keys must be present in the did
     * document, but not all did document keys must be present in this array, to allow for keys
     * that are not controleld by this agent.
     */
    keys: DidDocumentKey[];
  };
  secret?: never;
}
interface PeerDidNumAlgo4CreateOptions extends DidCreateOptions {
  method: 'peer';
  did?: never;
  didDocument: DidDocument;
  options: {
    numAlgo: PeerDidNumAlgo.ShortFormAndLongForm;
    /**
     * The linking between the did document keys and the kms keys. If you want to use
     * the DID within Credo you MUST add the key here. All keys must be present in the did
     * document, but not all did document keys must be present in this array, to allow for keys
     * that are not controleld by this agent.
     */
    keys: DidDocumentKey[];
  };
  secret?: never;
}
type PeerDidUpdateOptions = never;
type PeerDidDeactivateOptions = never;
//#endregion
export { PeerDidCreateOptions, PeerDidDeactivateOptions, PeerDidNumAlgo0CreateOptions, PeerDidNumAlgo1CreateOptions, PeerDidNumAlgo2CreateOptions, PeerDidNumAlgo4CreateOptions, PeerDidRegistrar, PeerDidUpdateOptions };
//# sourceMappingURL=PeerDidRegistrar.d.ts.map