const fs = require('fs');
const mkdirp = require('mkdirp');
const path = require('path');

const { app } = require('electron').remote;

const userDataPath = app.getPath('userData');
const PATH = path.join(userDataPath, 'profileImages');
mkdirp.sync(PATH);

const hasImage = pubKey => fs.existsSync(getImagePath(pubKey));

const getImagePath = pubKey => `${PATH}/${pubKey}.png`;

const removeImage = pubKey => {
  if (hasImage(pubKey)) {
    fs.unlinkSync(getImagePath(pubKey));
  }
};

const removeImagesNotInArray = pubKeyArray => {
  fs.readdirSync(PATH)
    // Get all files that end with png
    .filter(file => file.includes('.png'))
    // Strip the extension
    .map(i => path.basename(i, '.png'))
    // Get any file that is not in the pubKeyArray
    .filter(i => !pubKeyArray.includes(i))
    // Remove them
    .forEach(i => removeImage(i));
};

const writePNGImage = (base64String, pubKey) => {
  const imagePath = getImagePath(pubKey);
  fs.writeFileSync(imagePath, base64String, 'base64');
  return imagePath;
};

module.exports = {
  writePNGImage,
  getImagePath,
  hasImage,
  removeImage,
  removeImagesNotInArray,
};
