import * as fs from "node:fs";
import Ajv from "ajv";
import { ApiError } from "./error.js";
const ajv = new Ajv({
    useDefaults: true
});
ajv.addFormat("misskey:id", /^[a-zA-Z0-9]+$/);
export default function(meta, paramDef, cb) {
    const validate = ajv.compile(paramDef);
    return (params, user, token, file, ip, headers)=>{
        let cleanup = undefined;
        if (meta.requireFile) {
            cleanup = ()=>{
                fs.unlink(file.path, ()=>{});
            };
            if (file == null) return Promise.reject(new ApiError({
                message: "File required.",
                code: "FILE_REQUIRED",
                id: "4267801e-70d1-416a-b011-4ee502885d8b"
            }));
        }
        const valid = validate(params);
        if (!valid) {
            if (file) cleanup();
            const errors = validate.errors;
            const err = new ApiError({
                message: "Invalid param.",
                code: "INVALID_PARAM",
                id: "3d81ceae-475f-4600-b2a8-2bc116157532"
            }, {
                param: errors[0].schemaPath,
                reason: errors[0].message
            });
            return Promise.reject(err);
        }
        return cb(params, user, token, file, cleanup, ip, headers);
    };
}
