import { DEVICE_TOKEN_FILE_NAME } from '../../paths';
import { logger, stringifyError } from '../../util';
import { Spawner } from '../../util/spawner';

export type DeviceTokens = {
  deviceId: any;
  accessToken: any;
  refreshToken: any;
  idToken: any;
};

export async function writeTokens({
  spawner,
  tokens
}: {
  spawner: Spawner;
  tokens: DeviceTokens;
}) {
  await spawner.mkdirp();

  let contents = tokens;
  if (await spawner.exists(DEVICE_TOKEN_FILE_NAME)) {
    try {
      const origContents = await spawner.readFile(DEVICE_TOKEN_FILE_NAME);
      const origParsed = JSON.parse(origContents);
      contents = { ...origParsed, ...contents };
    } catch (err) {
      logger.error(stringifyError(err));
      await spawner.rimraf(DEVICE_TOKEN_FILE_NAME);
    }
  }
  await spawner.writeFile(
    DEVICE_TOKEN_FILE_NAME,
    JSON.stringify(contents, null, 2)
  );
}
