import { cpanelFetch } from "@/lib/utils";
import { api2BaseCommand } from "../../../api2";
import { FilemanFileOpProps } from "../../types";

export default async function FileOp({
  operation,
  sourceFiles,
  destFiles,
  metadata,
  doubleDecode = true,
}: FilemanFileOpProps): Promise<any> {
  const command = api2BaseCommand({
    command: "Fileman",
    subcommand: "fileop",
  });

  const params: { [key: string]: any } = {};
  params.doubledecode = doubleDecode ? "1" : "0";
  params.op = operation;
  params.sourcefiles =
    typeof sourceFiles === "string" ? sourceFiles : sourceFiles.join(",");
  params.destfiles = destFiles;

  if (operation === "trash") {
    delete params.destfiles;
  }

  if (operation === "compress") {
    params.metadata = metadata;
    params.doubledecode = doubleDecode ? "1" : "0";
  } else {
    params.doubledecode = doubleDecode ? "1" : "0";
  }

  const paramsString = Object.keys(params)
    .map((e) => `${e}=${params[e]}`)
    .join("&");

  const fetchString = `${command}&${paramsString}`;

  const response = await cpanelFetch(fetchString);

  if (!response.ok) {
    throw new Error();
  }

  return await response.json();
}
