import define from "../../define.js";
import { AbuseUserReports, Users } from "../../../../models/index.js";
import { getInstanceActor } from "../../../../services/instance-actor.js";
import { deliver } from "../../../../queue/index.js";
import { renderActivity } from "../../../../remote/activitypub/renderer/index.js";
import { renderFlag } from "../../../../remote/activitypub/renderer/flag.js";
export const meta = {
    tags: [
        "admin"
    ],
    requireCredential: true,
    requireModerator: true
};
export const paramDef = {
    type: "object",
    properties: {
        reportId: {
            type: "string",
            format: "misskey:id"
        },
        forward: {
            type: "boolean",
            default: false
        }
    },
    required: [
        "reportId"
    ]
};
export default define(meta, paramDef, async (ps, me)=>{
    const report = await AbuseUserReports.findOneByOrFail({
        id: ps.reportId
    });
    if (report == null) {
        throw new Error("report not found");
    }
    if (ps.forward && report.targetUserHost != null) {
        const actor = await getInstanceActor();
        const targetUser = await Users.findOneByOrFail({
            id: report.targetUserId
        });
        deliver(actor, renderActivity(renderFlag(actor, [
            targetUser.uri
        ], report.comment)), targetUser.inbox);
    }
    await AbuseUserReports.update(report.id, {
        resolved: true,
        assigneeId: me.id,
        forwarded: ps.forward && report.targetUserHost != null
    });
});
