import { cloneDeep } from 'lodash';

const version = 76;

/**
 * Update to `@metamask/controllers@33.0.0` (rename "Collectible" to "NFT").
 */
export default {
  version,
  async migrate(originalVersionedData) {
    const versionedData = cloneDeep(originalVersionedData);
    versionedData.meta.version = version;
    const state = versionedData.data;
    const newState = transformState(state);
    versionedData.data = newState;
    return versionedData;
  },
};

function transformState(state) {
  if (state.CollectiblesController) {
    const {
      allCollectibleContracts,
      allCollectibles,
      ignoredCollectibles,
      ...remainingState
    } = state.CollectiblesController;
    state.NftController = {
      ...(allCollectibleContracts
        ? { allNftContracts: allCollectibleContracts }
        : {}),
      ...(allCollectibles ? { allNfts: allCollectibles } : {}),
      ...(ignoredCollectibles ? { ignoredNfts: ignoredCollectibles } : {}),
      ...remainingState,
    };
    delete state.CollectiblesController;
  }

  if (state.PreferencesController?.useCollectibleDetection) {
    state.PreferencesController.useNftDetection =
      state.PreferencesController.useCollectibleDetection;
    delete state.PreferencesController.useCollectibleDetection;
  }

  return state;
}