import { IDID, Methods } from '@ew-did-registry/did';
import {
  IDIDDocumentFull,
  IDIDDocumentLite,
} from '@ew-did-registry/did-document';
import { IClaimsFactory } from '@ew-did-registry/claims';
import { IOperator } from '@ew-did-registry/did-resolver-interface';
import { IKeys } from '@ew-did-registry/keys';

/**
 * @interface {IDIDRegistry}
 * Serves as a single entry point for all identity functionality
 */
export interface IDIDRegistry {
  /**
   * IDID specifies the interface for decentralised identities
   */
  did: IDID;
  /**
   * IDIDDocument exposes methods to operate with DID Documents
   */
  document: IDIDDocumentFull;
  /**
   * IClaims exposes functionality needed to manage Private and Public claims
   */
  claims: IClaimsFactory;
  /**
   * IKey is responsible for key management, signing, as well as verification of signature
   */
  keyStore: Map<string, IKeys>;

  changeOperator(operator: IOperator, network: Methods | string): void;

  read(did: string): Promise<IDIDDocumentLite>;
}
