import fs from "fs";
import os from "os";
// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'form... Remove this comment to see the full error message
import File from "formidable/lib/file";
import collectionImporter from "@server/commands/collectionImporter";
import { Attachment, User } from "@server/models";
import { Event } from "../../types";

export default class ImportsProcessor {
  async on(event: Event) {
    switch (event.name) {
      case "collections.import": {
        const { type } = event.data;
        const attachment = await Attachment.findByPk(event.modelId);
        const user = await User.findByPk(event.actorId);
        const buffer = await attachment.buffer;
        const tmpDir = os.tmpdir();
        const tmpFilePath = `${tmpDir}/upload-${event.modelId}`;
        await fs.promises.writeFile(tmpFilePath, buffer);
        const file = new File({
          name: attachment.name,
          type: attachment.type,
          path: tmpFilePath,
        });
        await collectionImporter({
          file,
          user,
          type,
          ip: event.ip,
        });
        await attachment.destroy();
        return;
      }

      default:
    }
  }
}
