"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.modifyAsync = modifyAsync;
exports.cleanBackupAsync = cleanBackupAsync;
exports.createBlankAsync = createBlankAsync;

function _fsExtra() {
  const data = _interopRequireDefault(require("fs-extra"));

  _fsExtra = function () {
    return data;
  };

  return data;
}

function _path() {
  const data = _interopRequireDefault(require("path"));

  _path = function () {
    return data;
  };

  return data;
}

function _plist() {
  const data = _interopRequireDefault(require("plist"));

  _plist = function () {
    return data;
  };

  return data;
}

function _ExponentTools() {
  const data = require("./ExponentTools");

  _ExponentTools = function () {
    return data;
  };

  return data;
}

function _Logger() {
  const data = _interopRequireDefault(require("./Logger"));

  _Logger = function () {
    return data;
  };

  return data;
}

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _getNormalizedPlistFilename(plistName) {
  let plistFilename;

  if (plistName.indexOf('.') !== -1) {
    plistFilename = plistName;
  } else {
    plistFilename = `${plistName}.plist`;
  }

  return plistFilename;
}
/**
 *  @param plistName base filename of property list. if no extension, assumes .plist
 */


async function modifyAsync(plistPath, plistName, transform) {
  let plistFilename = _getNormalizedPlistFilename(plistName);

  let configPlistName = _path().default.join(plistPath, plistFilename);

  let configFilename = _path().default.join(plistPath, `${plistName}.json`); // grab original plist as json object


  let config;

  if (process.platform === 'darwin') {
    await (0, _ExponentTools().spawnAsyncThrowError)('plutil', ['-convert', 'json', configPlistName, '-o', configFilename]);
    let configContents = await _fsExtra().default.readFile(configFilename, 'utf8');

    try {
      config = JSON.parse(configContents);
    } catch (e) {
      _Logger().default.info(`Error parsing ${configFilename}`, e);

      _Logger().default.info('The erroneous file contents was:', configContents);

      config = {};
    }
  } else {
    config = _plist().default.parse(_fsExtra().default.readFileSync(configPlistName, 'utf8'));
  } // apply transformation


  config = transform(config); // back up old plist and swap in modified one

  await (0, _ExponentTools().spawnAsyncThrowError)('/bin/cp', [configPlistName, `${configPlistName}.bak`]);
  await _fsExtra().default.writeFile(configFilename, JSON.stringify(config));

  if (process.platform === 'darwin') {
    await (0, _ExponentTools().spawnAsyncThrowError)('plutil', ['-convert', 'xml1', configFilename, '-o', configPlistName]);
  } else {
    await _fsExtra().default.writeFile(configPlistName, _plist().default.build(config));
  }

  return config;
}

async function createBlankAsync(plistPath, plistName) {
  // write empty json file
  const emptyConfig = {};

  const tmpConfigFile = _path().default.join(plistPath, `${plistName}.json`);

  await _fsExtra().default.writeFile(tmpConfigFile, JSON.stringify(emptyConfig)); // convert to plist

  let plistFilename = _getNormalizedPlistFilename(plistName);

  let configPlistName = _path().default.join(plistPath, plistFilename);

  if (process.platform === 'darwin') {
    await (0, _ExponentTools().spawnAsyncThrowError)('plutil', ['-convert', 'xml1', tmpConfigFile, '-o', configPlistName]);
  } else {
    await _fsExtra().default.writeFile(configPlistName, JSON.stringify(_plist().default.build(emptyConfig)));
  } // remove tmp json file


  await (0, _ExponentTools().spawnAsyncThrowError)('/bin/rm', [tmpConfigFile]);
}

async function cleanBackupAsync(plistPath, plistName, restoreOriginal = true) {
  let plistFilename = _getNormalizedPlistFilename(plistName);

  let configPlistName = _path().default.join(plistPath, plistFilename);

  let configFilename = _path().default.join(plistPath, `${plistName}.json`);

  const backupPlistPath = `${configPlistName}.bak`;

  if (restoreOriginal && (await _fsExtra().default.pathExists(backupPlistPath))) {
    await _fsExtra().default.copy(backupPlistPath, configPlistName);
  }

  await _fsExtra().default.remove(backupPlistPath);
  await _fsExtra().default.remove(configFilename);
}
//# sourceMappingURL=../__sourcemaps__/detach/IosPlist.js.map