import { addFile } from "../../../../services/drive/add-file.js";
import { DriveFiles } from "../../../../models/index.js";
import { MastoApiError } from "../middleware/catch-errors.js";
import { toSingleLast } from "../../../../prelude/array.js";
export class MediaHelpers {
    static async uploadMedia(ctx) {
        const files = ctx.request.files;
        const file = toSingleLast(files?.file);
        const user = ctx.user;
        const body = ctx.request.body;
        if (!file) throw new MastoApiError(400, "Validation failed: File content type is invalid, File is invalid");
        return addFile({
            user: user,
            path: file.filepath,
            name: file.originalFilename !== null && file.originalFilename !== 'file' ? file.originalFilename : undefined,
            comment: body?.description ?? undefined,
            sensitive: false
        }).then((p)=>DriveFiles.pack(p));
    }
    static async uploadMediaBasic(file, ctx) {
        const user = ctx.user;
        return addFile({
            user: user,
            path: file.filepath,
            name: file.originalFilename !== null && file.originalFilename !== 'file' ? file.originalFilename : undefined,
            sensitive: false
        });
    }
    static async updateMedia(file, ctx) {
        const user = ctx.user;
        const body = ctx.request.body;
        await DriveFiles.update(file.id, {
            comment: body?.description ?? undefined
        });
        return DriveFiles.findOneByOrFail({
            id: file.id,
            userId: user.id
        }).then((p)=>DriveFiles.pack(p));
    }
    static async getMediaPacked(id, ctx) {
        const user = ctx.user;
        return this.getMedia(id, ctx).then((p)=>p ? DriveFiles.pack(p) : null);
    }
    static async getMediaPackedOr404(id, ctx) {
        return this.getMediaPacked(id, ctx).then((p)=>{
            if (p) return p;
            throw new MastoApiError(404);
        });
    }
    static async getMedia(id, ctx) {
        const user = ctx.user;
        return DriveFiles.findOneBy({
            id: id,
            userId: user.id
        });
    }
    static async getMediaOr404(id, ctx) {
        return this.getMedia(id, ctx).then((p)=>{
            if (p) return p;
            throw new MastoApiError(404);
        });
    }
}
