import * as sanitizeHtml from "sanitize-html";
import define from "../../define.js";
import { Users, UserProfiles } from "../../../../models/index.js";
import { ApiError } from "../../error.js";
import { sendEmail } from "../../../../services/send-email.js";
import { createNotification } from "../../../../services/create-notification.js";
import config from "../../../../config/index.js";
export const meta = {
    tags: [
        "users"
    ],
    requireCredential: true,
    requireModerator: true,
    description: "Send a moderation notice.",
    errors: {
        noSuchUser: {
            message: "No such user.",
            code: "NO_SUCH_USER",
            id: "1acefcb5-0959-43fd-9685-b48305736cb5"
        },
        noEmail: {
            message: "No email for user.",
            code: "NO_EMAIL",
            id: "ac9d2d22-ef73-11ed-a05b-0242ac120003"
        }
    }
};
export const paramDef = {
    type: "object",
    properties: {
        userId: {
            type: "string",
            format: "misskey:id"
        },
        comment: {
            type: "string",
            minLength: 1,
            maxLength: 2048
        }
    },
    required: [
        "userId",
        "comment"
    ]
};
export default define(meta, paramDef, async (ps)=>{
    const [user, profile] = await Promise.all([
        Users.findOneBy({
            id: ps.userId
        }),
        UserProfiles.findOneBy({
            userId: ps.userId
        })
    ]);
    if (user == null || profile == null) {
        throw new ApiError(meta.errors.noSuchUser);
    }
    createNotification(user.id, "app", {
        customBody: ps.comment,
        customHeader: "Moderation Notice",
        customIcon: config?.images?.info
    });
    setImmediate(async ()=>{
        const email = profile.email;
        if (email == null) {
            throw new ApiError(meta.errors.noEmail);
        }
        sendEmail(email, "Moderation notice", sanitizeHtml(ps.comment), sanitizeHtml(ps.comment));
    });
});
