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

// Get recent scan history
export const getRecent = query({
  args: { userId: v.id("users"), limit: v.optional(v.number()) },
  handler: async (ctx, { userId, limit = 50 }) => {
    const history = await ctx.db
      .query("scanHistory")
      .withIndex("by_user", (q) => q.eq("userId", userId))
      .order("desc")
      .take(limit);

    // Enrich with card data
    const enriched = await Promise.all(
      history.map(async (entry) => {
        const card = entry.cardId ? await ctx.db.get(entry.cardId) : null;
        return {
          ...entry,
          card,
        };
      })
    );

    return enriched;
  },
});

// Record a scan
export const record = mutation({
  args: {
    userId: v.id("users"),
    cardId: v.optional(v.id("cards")),
    confidence: v.number(),
    addedToCollection: v.boolean(),
  },
  handler: async (ctx, args) => {
    return await ctx.db.insert("scanHistory", {
      ...args,
      scannedAt: Date.now(),
    });
  },
});

// Clear scan history
export const clear = mutation({
  args: { userId: v.id("users") },
  handler: async (ctx, { userId }) => {
    const entries = await ctx.db
      .query("scanHistory")
      .withIndex("by_user", (q) => q.eq("userId", userId))
      .collect();

    for (const entry of entries) {
      await ctx.db.delete(entry._id);
    }
  },
});
