// Created from the setup in https://veramo.io/docs/guides/react_native

// Core interfaces
/* import {
  createAgent,
  IDIDManager,
  IResolver,
  IDataStore,
  IKeyManager,
} from "@veramo/core";
 */
// Core identity manager plugin
//import { DIDManager } from "@veramo/did-manager";

// Ethr did identity provider
//import { EthrDIDProvider } from "@veramo/did-provider-ethr";

// Core key manager plugin
//import { KeyManager } from "@veramo/key-manager";

// Custom key management system for RN
//import { KeyManagementSystem } from '@veramo/kms-local-react-native'

// Custom resolver
// Custom resolvers
//import { DIDResolverPlugin } from "@veramo/did-resolver";
/* import { Resolver } from "did-resolver";
import { getResolver as ethrDidResolver } from "ethr-did-resolver";
import { getResolver as webDidResolver } from "web-did-resolver";
 */
// for VCs and VPs https://veramo.io/docs/api/credential-w3c
//import { CredentialIssuer } from '@veramo/credential-w3c'

// Storage plugin using TypeOrm
/* import {
  Entities,
  KeyStore,
  DIDStore,
  IDataStoreORM,
} from "@veramo/data-store";
 */
// TypeORM is installed with @veramo/typeorm
//import { createConnection } from 'typeorm'

//import * as R from "ramda";

/*
import { Contact } from '../entity/contact'
import { Settings } from '../entity/settings'
import { PrivateData } from '../entity/privateData'

import { Initial1616938713828 }          from '../migration/1616938713828-initial'
import { SettingsContacts1616967972293 } from '../migration/1616967972293-settings-contacts'
import { EncryptedSeed1637856484788 }    from '../migration/1637856484788-EncryptedSeed'
import { HomeScreenConfig1639947962124 } from '../migration/1639947962124-HomeScreenConfig'
import { HandlePublicKeys1652142819353 } from '../migration/1652142819353-HandlePublicKeys'
import { LastClaimsSeen1656811846836 }   from '../migration/1656811846836-LastClaimsSeen'
import { ContactRegistered1662256903367 }from '../migration/1662256903367-ContactRegistered'
import { PrivateData1663080623479 }      from '../migration/1663080623479-PrivateData'

const ALL_ENTITIES = Entities.concat([Contact, Settings, PrivateData])

// Create react native DB connection configured by ormconfig.js

export const dbConnection = createConnection({
  database: 'endorser-mobile.sqlite',
  entities: ALL_ENTITIES,
  location: 'default',
  logging: ['error', 'info', 'warn'],
  migrations: [ Initial1616938713828, SettingsContacts1616967972293, EncryptedSeed1637856484788, HomeScreenConfig1639947962124, HandlePublicKeys1652142819353, LastClaimsSeen1656811846836, ContactRegistered1662256903367, PrivateData1663080623479 ],
  migrationsRun: true,
  type: 'react-native',
})
*/
function didProviderName(netName: string) {
  return "did:ethr" + (netName === "mainnet" ? "" : ":" + netName);
}

//const NETWORK_NAMES = ["mainnet", "rinkeby"];

const DEFAULT_DID_PROVIDER_NETWORK_NAME = "mainnet";

export const DEFAULT_DID_PROVIDER_NAME = didProviderName(
  DEFAULT_DID_PROVIDER_NETWORK_NAME,
);

export const HANDY_APP = false;

// this is used as the object in RegisterAction claims
export const SERVICE_ID = "endorser.ch";

//const INFURA_PROJECT_ID = "INFURA_PROJECT_ID";
/*
const providers = {}
NETWORK_NAMES.forEach((networkName) => {
  providers[didProviderName(networkName)] = new EthrDIDProvider({
    defaultKms: 'local',
    network: networkName,
    rpcUrl: 'https://' + networkName + '.infura.io/v3/' + INFURA_PROJECT_ID,
    gas: 1000001,
    ttl: 60 * 60 * 24 * 30 * 12 + 1,
  })
})


const didManager = new DIDManager({
  store: new DIDStore(dbConnection),
  defaultProvider: DEFAULT_DID_PROVIDER_NAME,
  providers: providers,
})
*/

/* const basicDidResolvers = NETWORK_NAMES.map((networkName) => [
  networkName,
  new Resolver({
    ethr: ethrDidResolver({
      networks: [
        {
          name: networkName,
          rpcUrl:
            "https://" + networkName + ".infura.io/v3/" + INFURA_PROJECT_ID,
        },
      ],
    }).ethr,
    web: webDidResolver().web,
  }),
]);

const basicResolverMap = R.fromPairs(basicDidResolvers)

export const DEFAULT_BASIC_RESOLVER = basicResolverMap[DEFAULT_DID_PROVIDER_NETWORK_NAME]

const agentDidResolvers = NETWORK_NAMES.map((networkName) => {
  return new DIDResolverPlugin({
    resolver: basicResolverMap[networkName],
  })
})

let allPlugins = [
  new CredentialIssuer(),
  new KeyManager({
    store: new KeyStore(dbConnection),
    kms: {
      local: new KeyManagementSystem(),
    },
  }),
  didManager,
].concat(agentDidResolvers)
*/

//export const agent = createAgent<IDIDManager & IKeyManager & IDataStore & IDataStoreORM & IResolver>({ plugins: allPlugins })