package com.greenaddress.greenapi;
import com.blockstream.libwally.Wally;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class LoginData {
public final ArrayList<Map<String, Object>> mSubAccounts;
public final Map<String, Object> mUserConfig;
public final int[] mGaitPath;
public final Map<String, Object> mRawData;
public final Map<ByteBuffer, String> mAssets;
public final Map<ByteBuffer, Integer> mAssetIds;
public final Map<String, ByteBuffer> mAssetsByName;
public LoginData(final Map<String, Object> map) {
mSubAccounts = (ArrayList) map.get("subaccounts");
mUserConfig = (Map<String, Object>) map.get("appearance");
mGaitPath = getPath((String) map.get("gait_path"));
mRawData = map;
mAssets = new HashMap<>();
mAssetIds = new HashMap<>();
mAssetsByName = new HashMap<>();
if (map.containsKey("assets")) {
final Map<String, String> assets = (Map) map.get("assets");
for (final Map.Entry<String, String> entry : assets.entrySet()) {
final ByteBuffer assetId = ByteBuffer.wrap(Wally.hex_to_bytes(entry.getKey()));
mAssets.put(assetId, entry.getValue());
mAssetsByName.put(entry.getValue(), assetId);
}
}
if (map.containsKey("asset_ids")) {
final Map<String, Integer> asset_ids = (Map) map.get("asset_ids");
for (final Map.Entry<String, Integer> entry : asset_ids.entrySet()) {
final ByteBuffer assetId = ByteBuffer.wrap(Wally.hex_to_bytes(entry.getKey()));
mAssetIds.put(assetId, entry.getValue());
}
}
}
public <T> T get(final String name) {
return (T) mRawData.get(name);
}
final Integer getGAAssetId(final String assetName) {
final ByteBuffer assetId = mAssetsByName.get(assetName);
return assetId == null ? null : mAssetIds.get(assetId);
}
private int u8(final int i) { return i < 0 ? 256 + i : i; }
private int[] getPath(final String pathHex) {
if (pathHex == null)
return null;
final byte[] pathBytes = Wally.hex_to_bytes(pathHex);
final int[] path = new int[32];
for (int i = 0; i < 32; ++i)
path[i] = u8(pathBytes[i * 2]) * 256 + u8(pathBytes[i * 2 + 1]);
return path;
}
}