// apps/web/src/server/db/queries/chat-messages.ts
import { and, desc, eq, lt } from 'drizzle-orm';
import type { DrizzleClient } from '@/server/db/client.js';
import { chatMessages, type ChatMessageRow } from '@/server/db/schema.js';

export async function insertChatMessage(
  db: DrizzleClient,
  args: { threadId: string; senderUserId: string; body: string },
): Promise<ChatMessageRow> {
  const [row] = await db
    .insert(chatMessages)
    .values({
      threadId: args.threadId,
      senderUserId: args.senderUserId,
      body: args.body,
    })
    .returning();
  return row!;
}

export async function listMessages(
  db: DrizzleClient,
  threadId: string,
  opts: { limit?: number; before?: Date } = {},
): Promise<ChatMessageRow[]> {
  const limit = Math.min(Math.max(opts.limit ?? 50, 1), 100);
  const where = opts.before
    ? and(eq(chatMessages.threadId, threadId), lt(chatMessages.createdAt, opts.before))
    : eq(chatMessages.threadId, threadId);
  return db
    .select()
    .from(chatMessages)
    .where(where)
    .orderBy(desc(chatMessages.createdAt))
    .limit(limit);
}
