import { Router } from "express";

import { authenticate } from "../../middleware/auth.js";
import { validate } from "../../middleware/validate.js";
import { asyncHandler } from "../../utils/http.js";
import { chatConversationQuerySchema, chatMessageBodySchema } from "./chat.schemas.js";
import { getConversation, listChatThreads, sendChatMessage } from "./chat.service.js";

export const chatRouter = Router();

chatRouter.get(
  "/threads",
  authenticate,
  asyncHandler(async (request, response) => {
    response.json({ data: await listChatThreads(request.authUser!.id) });
  })
);

chatRouter.get(
  "/messages",
  authenticate,
  validate({ query: chatConversationQuerySchema }),
  asyncHandler(async (request, response) => {
    response.json({ data: await getConversation(request.authUser!.id, request.query.withUserId as string) });
  })
);

chatRouter.post(
  "/messages",
  authenticate,
  validate({ body: chatMessageBodySchema }),
  asyncHandler(async (request, response) => {
    response.status(201).json({ data: await sendChatMessage(request.authUser!.id, request.body) });
  })
);
