import { kdf } from './kdf.js'
import PhraseWallet from './PhraseWallet.js'
import Base58 from './deps/Base58.js'
import { decryptStoredWallet } from './decryptStoredWallet.js'

export const createWallet = async (sourceType, source, statusUpdateFn) => {
	let version, seed

	switch (sourceType) {
		case 'phrase':
			version = 2
			seed = await kdf(source.seedPhrase, void 0, statusUpdateFn)
			break
		case 'seed':
			version = 1
			seed = Base58.decode(source.seed)
			break
		case 'storedWallet':
		case 'backedUpSeed':
			version = source.wallet.version
			seed = await decryptStoredWallet(source.password, source.wallet, statusUpdateFn)
			break
		default:
			throw 'sourceType ' + sourceType + ' not recognized'
	}

	const wallet = new PhraseWallet(seed, version)
	return wallet
}