import PublicKeyIdentityProvider from './publickey.js'
const identityProviders = {}
const isProviderSupported = (type) => {
  return Object.keys(identityProviders).includes(type)
}
const getIdentityProvider = (type) => {
  if (!isProviderSupported(type)) {
    throw new Error(`IdentityProvider type '${type}' is not supported`)
  }
  return identityProviders[type]
}
/**
  * Adds an identity provider.
  * @param {IdentityProvider} identityProvider The identity provider to add.
  * @throws Given IdentityProvider doesn\'t have a field \'type\'.
  * @throws Given IdentityProvider doesn\'t have a function \'verifyIdentity\'.
  * @throws IdentityProvider ${IdentityProvider.type} already added.
  * @static
  * @memberof module:Identities
  */
const useIdentityProvider = (identityProvider) => {
  if (!identityProvider.type ||
     typeof identityProvider.type !== 'string') {
    throw new Error('Given IdentityProvider doesn\'t have a field \'type\'.')
  }
  if (!identityProvider.verifyIdentity) {
    throw new Error('Given IdentityProvider doesn\'t have a function \'verifyIdentity\'.')
  }
  identityProviders[identityProvider.type] = identityProvider
}
useIdentityProvider(PublicKeyIdentityProvider)
export { useIdentityProvider, getIdentityProvider, PublicKeyIdentityProvider }