import { baseURL } from "./api-utils";
import { apiReq } from "./api-utils";
import { store } from "@/store";
import i18n from "@/i18n.js";

const backupBase = baseURL + "backups/";

export const backupURLs = {
  // Backup
  available: `${backupBase}available`,
  createBackup: `${backupBase}export/database`,
  importBackup: fileName => `${backupBase}${fileName}/import`,
  deleteBackup: fileName => `${backupBase}${fileName}/delete`,
  downloadBackup: fileName => `${backupBase}${fileName}/download`,
};

export const backupAPI = {
  /**
   * Request all backups available on the server
   * @returns {Array} List of Available Backups
   */
  async requestAvailable() {
    let response = await apiReq.get(backupURLs.available);
    return response.data;
  },
  /**
   * Calls for importing a file on the server
   * @param {string} fileName
   * @param {object} data
   * @returns A report containing status of imported items
   */
  async import(fileName, data) {
    let response = await apiReq.post(backupURLs.importBackup(fileName), data);
    store.dispatch("requestRecentRecipes");
    return response;
  },
  /**
   * Removes a file from the server
   * @param {string} fileName
   */
  async delete(fileName) {
    return apiReq.delete(
      backupURLs.deleteBackup(fileName),
      null,
      () => i18n.t("settings.backup.unable-to-delete-backup"),
      () => i18n.t("settings.backup.backup-deleted")
    );
  },
  /**
   * Creates a backup on the serve given a set of options
   * @param {object} data
   * @returns
   */
  async create(options) {
    return apiReq.post(
      backupURLs.createBackup,
      options,
      () => i18n.t("settings.backup.error-creating-backup-see-log-file"),
      response => {
        return i18n.t("settings.backup.backup-created-at-response-export_path", { path: response.data.export_path });
      }
    );
  },
  /**
   * Downloads a file from the server. I don't actually think this is used?
   * @param {string} fileName
   * @returns Download URL
   */
  async download(fileName) {
    const url = backupURLs.downloadBackup(fileName);
    apiReq.download(url);
  },
};
