import type { ChatsChatid } from "~/schemas/public/Chats";
import type { Querier } from "~/server/db";
import { TRPCError } from "@trpc/server";
import type { UsersId } from "~/schemas/public/Users";

export type ChatUserInfo = {
  id: UsersId;
  username: string;
  email: string;
};

export const getRaw = async ({
  db,
  chatId,
}: {
  db: Querier;
  chatId: ChatsChatid;
}) => {
  try {
    return db
      .selectFrom("chats")
      .selectAll()
      .where("chats.chatid", "=", chatId)
      .executeTakeFirstOrThrow();
  } catch (e) {
    throw new TRPCError({
      code: "BAD_REQUEST",
      message: "Error while getting chat: " + (e as Error).message,
    });
  }
};

export const add = async ({ db, userId }: { db: Querier; userId: UsersId }) => {
  try {
    const newChat = await db
      .insertInto("chats")
      .values({
        user_ref: userId,
        created_at: new Date(),
      })
      .returningAll()
      .executeTakeFirstOrThrow();
    return newChat;
  } catch (e) {
    throw new TRPCError({
      code: "BAD_REQUEST",
      message: "Error while creating chat: " + (e as Error).message,
    });
  }
};
