import { resolveNote } from "../models/note.js";
import renderAcceptQuoteRequest from "../renderer/accept-quote-request.js";
import { deliverToUser } from "../deliver-manager.js";
import { renderActivity } from "../renderer/index.js";
import { parseUri } from "../db-resolver.js";
import { InteractionStamps, Notes } from "../../../models/index.js";
import { genId } from "../../../misc/gen-id.js";
export default (async (actor, activity)=>{
    const localParsed = parseUri(activity.object);
    if (!localParsed.local) return "skip: local note not local";
    const [note, targetNote] = await Promise.all([
        resolveNote(activity.instrument),
        Notes.findOneBy({
            id: localParsed.id
        })
    ]);
    if (note === null) return "skip: note not found";
    if (note.userId !== actor.id) return "skip: actor is requesting authorization for a quote they didn't make";
    if (targetNote === null) return "skip: target note not found";
    if (!await Notes.isVisibleForMe(targetNote, actor.id)) return "skip: target note is not visible for remote user";
    let stamp = await InteractionStamps.findOneBy({
        noteId: note.id,
        targetNoteId: targetNote.id
    });
    if (stamp === null) {
        stamp = {
            id: genId(),
            type: "quote",
            noteId: note.id,
            targetNoteId: targetNote.id
        };
        await InteractionStamps.insert(stamp);
    }
    stamp.note = note;
    stamp.targetNote = targetNote;
    await deliverToUser({
        id: targetNote.userId,
        host: null
    }, renderActivity(await renderAcceptQuoteRequest(activity, stamp)), actor);
    return "ok";
});
