import electron from "electron";
import fs from "fs";

const {app} = process.type === "renderer" ? electron.remote : electron;

let setupCompleted = false;

const zulipDir = app.getPath("userData");
const logDir = `${zulipDir}/Logs/`;
const configDir = `${zulipDir}/config/`;
export const initSetUp = (): void => {
  // If it is the first time the app is running
  // create zulip dir in userData folder to
  // avoid errors
  if (!setupCompleted) {
    if (!fs.existsSync(zulipDir)) {
      fs.mkdirSync(zulipDir);
    }

    if (!fs.existsSync(logDir)) {
      fs.mkdirSync(logDir);
    }

    // Migrate config files from app data folder to config folder inside app
    // data folder. This will be done once when a user updates to the new version.
    if (!fs.existsSync(configDir)) {
      fs.mkdirSync(configDir);
      const domainJson = `${zulipDir}/domain.json`;
      const settingsJson = `${zulipDir}/settings.json`;
      const updatesJson = `${zulipDir}/updates.json`;
      const windowStateJson = `${zulipDir}/window-state.json`;
      const configData = [
        {
          path: domainJson,
          fileName: "domain.json",
        },
        {
          path: settingsJson,
          fileName: "settings.json",
        },
        {
          path: updatesJson,
          fileName: "updates.json",
        },
      ];
      for (const data of configData) {
        if (fs.existsSync(data.path)) {
          fs.copyFileSync(data.path, configDir + data.fileName);
          fs.unlinkSync(data.path);
        }
      }

      // `window-state.json` is only deleted not moved, as the electron-window-state
      // package will recreate the file in the config folder.
      if (fs.existsSync(windowStateJson)) {
        fs.unlinkSync(windowStateJson);
      }
    }

    setupCompleted = true;
  }
};
