import { WorkerPool } from "./WorkerPool";
import store from "./store";
import { clearParsedPlugins, setPending } from "../slices/plugins";

export const excludedPlugins = [
  "Skyrim.esm",
  "Update.esm",
  "Dawnguard.esm",
  "HearthFires.esm",
  "Dragonborn.esm",
];

export const isPluginPath = (path: string) => {
  if (
    /^.*\.es[mpl]$/i.test(path)
  ) {
    return true;
  }
  return false;
}

export const isPlugin = (file: File) => {
  return isPluginPath(file.webkitRelativePath ?? file.name);
}

export const parsePluginFiles = (pluginFiles: File[], workerPool: WorkerPool) => {
  if (pluginFiles.length === 0) {
    alert("Found no plugins in the folder. Please select the Data folder underneath the Skyrim installation folder.");
    return;
  }
  store.dispatch(clearParsedPlugins());
  store.dispatch(setPending(pluginFiles.length));

  pluginFiles.forEach(async (plugin) => {
    const contents = new Uint8Array(await plugin.arrayBuffer());
    workerPool.pushTask({
      skipParsing: excludedPlugins.includes(plugin.name),
      filename: plugin.name,
      lastModified: plugin.lastModified,
      contents,
    });
  });
}

// From: https://stackoverflow.com/a/18650828
export const formatBytes = (bytes: number, decimals = 2): string => {
  if (bytes === 0) return '0 Bytes';

  const k = 1024;
  const dm = decimals < 0 ? 0 : decimals;
  const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

  const i = Math.floor(Math.log(bytes) / Math.log(k));

  return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
}