import { injectable, inject } from "tsyringe";

import { File } from "@/domain/models";
import { FileUpload } from "@/domain/usecases";
import { HttpRequest, HttpResponse } from "@/infra/http";
import { ok, serverError } from "@/infra/http/responses";
import { Controller } from "@/presentation/protocols";

@injectable()
export class FileUploadController implements Controller {
  constructor(
    @inject("FileUpload")
    private readonly fileUpload: FileUpload
  ) {}

  async handle(request: HttpRequest<{ files: File[] }>): Promise<HttpResponse> {
    try {
      const { files } = request.body as { files: File[] };
      const filesPaths = await this.fileUpload.upload(files);

      return ok(filesPaths);
    } catch (error) {
      return serverError({ message: error.message });
    }
  }
}