import { File } from "./interfaces";

export default function files(pterodactyl: any) {
  return {
    async rename(from: File, newName: string) {
      console.log("rename", from);

      try {
        const response = await fetch(
          `${process.env.NEXT_PUBLIC_URL}/api/client/servers/${pterodactyl.server_id}/files/rename`,
          {
            method: "PUT",
            headers: await pterodactyl.helpers.authHeader(),
            body: JSON.stringify({
              root: pterodactyl.workingDirectory,
              files: [
                {
                  from: from.attributes.name,
                  to: newName,
                },
              ],
            }),
          }
        );
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        console.log(response);
      } catch (error) {
        console.error("Error fetching data:", error);
      }
    },

    async fetchFiles() {
      try {
        const response = await fetch(
          `${process.env.NEXT_PUBLIC_URL}/api/client/servers/${pterodactyl.server_id}/files/list?directory=${pterodactyl.workingDirectory}`,
          {
            method: "GET",
            headers: await pterodactyl.helpers.authHeader(),
          }
        );
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json();
        const sortedFileList = data.data.sort((a: File, b: File) => {
          // Sort directories before files
          if (!a.attributes.is_file && b.attributes.is_file) return -1;
          if (a.attributes.is_file && !b.attributes.is_file) return 1;
          // Sort alphabetically by name
          return a.attributes.name.localeCompare(b.attributes.name);
        });

        return data.data;
      } catch (error) {
        console.error("Error fetching data:", error);
      }
    },
  };
}
