import store from './store';

export function getAccount(id) {
  const accounts = store.local.getJSON('accounts') || [];
  return accounts.find((a) => a.info.id === id) || accounts[0];
}

export function getCurrentAccount() {
  const currentAccount = store.session.get('currentAccount');
  const account = getAccount(currentAccount);
  return account;
}

export function getCurrentAccountNS() {
  const account = getCurrentAccount();
  const {
    instanceURL,
    info: { id },
  } = account;
  return `${id}@${instanceURL}`;
}

export function saveAccount(account) {
  const accounts = store.local.getJSON('accounts') || [];
  const acc = accounts.find((a) => a.info.id === account.info.id);
  if (acc) {
    acc.info = account.info;
    acc.instanceURL = account.instanceURL;
    acc.accessToken = account.accessToken;
  } else {
    accounts.push(account);
  }
  store.local.setJSON('accounts', accounts);
  store.session.set('currentAccount', account.info.id);
}

let currentInstance = null;
export function getCurrentInstance() {
  if (currentInstance) return currentInstance;
  try {
    const account = getCurrentAccount();
    const instances = store.local.getJSON('instances');
    const instance = account.instanceURL.toLowerCase();
    return (currentInstance = instances[instance]);
  } catch (e) {
    console.error(e);
    alert('Failed to load instance configuration. Please try again.');
    // Temporary fix for corrupted data
    store.local.del('instances');
    location.reload();
    return {};
  }
}
