import { mutation } from "./_generated/server";
import { v } from "convex/values";

// Add reaction (upsert - no duplicates)
export const add = mutation({
  args: {
    messageId: v.id("messages"),
    userId: v.id("userProfiles"),
    emoji: v.string(),
  },
  returns: v.null(),
  handler: async (ctx, args) => {
    // Check if already exists
    const existing = await ctx.db
      .query("messageReactions")
      .withIndex("by_message_user_emoji", (q) =>
        q
          .eq("messageId", args.messageId)
          .eq("userId", args.userId)
          .eq("emoji", args.emoji)
      )
      .unique();

    if (!existing) {
      await ctx.db.insert("messageReactions", {
        messageId: args.messageId,
        userId: args.userId,
        emoji: args.emoji,
      });
    }

    return null;
  },
});

// Remove reaction
export const remove = mutation({
  args: {
    messageId: v.id("messages"),
    userId: v.id("userProfiles"),
    emoji: v.string(),
  },
  returns: v.null(),
  handler: async (ctx, args) => {
    const existing = await ctx.db
      .query("messageReactions")
      .withIndex("by_message_user_emoji", (q) =>
        q
          .eq("messageId", args.messageId)
          .eq("userId", args.userId)
          .eq("emoji", args.emoji)
      )
      .unique();

    if (existing) {
      await ctx.db.delete(existing._id);
    }

    return null;
  },
});
