import define from "../../define.js";
import { ApiError } from "../../error.js";
import { genId } from "../../../../misc/gen-id.js";
import { AnnouncementReads, Announcements, Users } from "../../../../models/index.js";
import { publishMainStream } from "../../../../services/stream.js";
export const meta = {
    tags: [
        "account"
    ],
    requireCredential: true,
    kind: "write:account",
    errors: {
        noSuchAnnouncement: {
            message: "No such announcement.",
            code: "NO_SUCH_ANNOUNCEMENT",
            id: "184663db-df88-4bc2-8b52-fb85f0681939"
        }
    }
};
export const paramDef = {
    type: "object",
    properties: {
        announcementId: {
            type: "string",
            format: "misskey:id"
        }
    },
    required: [
        "announcementId"
    ]
};
export default define(meta, paramDef, async (ps, user)=>{
    // Check if announcement exists
    const exist = await Announcements.exist({
        where: {
            id: ps.announcementId
        }
    });
    if (!exist) {
        throw new ApiError(meta.errors.noSuchAnnouncement);
    }
    // Check if already read
    const read = await AnnouncementReads.exist({
        where: {
            announcementId: ps.announcementId,
            userId: user.id
        }
    });
    if (read) {
        return;
    }
    // Create read
    await AnnouncementReads.insert({
        id: genId(),
        createdAt: new Date(),
        announcementId: ps.announcementId,
        userId: user.id
    });
    if (!await Users.getHasUnreadAnnouncement(user.id)) {
        publishMainStream(user.id, "readAllAnnouncements");
    }
});
