/*

This migration moves the identities stored in the KeyringController
 into the PreferencesController

*/

import { cloneDeep } from 'lodash';

const version = 26;

export default {
  version,
  migrate(originalVersionedData) {
    const versionedData = cloneDeep(originalVersionedData);
    versionedData.meta.version = version;
    try {
      const state = versionedData.data;
      versionedData.data = transformState(state);
    } catch (err) {
      console.warn(`MetaMask Migration #${version}${err.stack}`);
      return Promise.reject(err);
    }
    return Promise.resolve(versionedData);
  },
};

function transformState(state) {
  if (!state.KeyringController || !state.PreferencesController) {
    return state;
  }

  if (!state.KeyringController.walletNicknames) {
    return state;
  }

  state.PreferencesController.identities = Object.keys(
    state.KeyringController.walletNicknames,
  ).reduce((identities, address) => {
    identities[address] = {
      name: state.KeyringController.walletNicknames[address],
      address,
    };
    return identities;
  }, {});
  delete state.KeyringController.walletNicknames;
  return state;
}