import { NoteFavorites, NoteThreadMutings, NoteWatchings } from "../../../../models/index.js";
import { getNote } from "../../common/getters.js";
import define from "../../define.js";
export const meta = {
    tags: [
        "notes"
    ],
    requireCredential: true,
    res: {
        type: "object",
        optional: false,
        nullable: false,
        properties: {
            isFavorited: {
                type: "boolean",
                optional: false,
                nullable: false
            },
            isWatching: {
                type: "boolean",
                optional: false,
                nullable: false
            },
            isMutedThread: {
                type: "boolean",
                optional: false,
                nullable: false
            }
        }
    }
};
export const paramDef = {
    type: "object",
    properties: {
        noteId: {
            type: "string",
            format: "misskey:id"
        }
    },
    required: [
        "noteId"
    ]
};
export default define(meta, paramDef, async (ps, user)=>{
    const note = await getNote(ps.noteId, user);
    const [favorite, watching, threadMuting] = await Promise.all([
        NoteFavorites.count({
            where: {
                userId: user.id,
                noteId: note.id
            },
            take: 1
        }),
        NoteWatchings.count({
            where: {
                userId: user.id,
                noteId: note.id
            },
            take: 1
        }),
        NoteThreadMutings.count({
            where: {
                userId: user.id,
                threadId: note.threadId || note.id
            },
            take: 1
        })
    ]);
    return {
        isFavorited: favorite !== 0,
        isWatching: watching !== 0,
        isMutedThread: threadMuting !== 0
    };
});
