import { protectedProcedure, publicProcedure, router } from "../_core/trpc.ts";
import { z } from "zod";
import { getChatMessages, getDb } from "../db.ts";
import { eq } from "drizzle-orm";
import { chatMessages } from "../../drizzle/schema.ts";

export const chatRouter = router({
  getMessages: publicProcedure
    .input(z.object({ channel: z.string().default("global"), limit: z.number().default(50) }))
    .query(async ({ input }) => {
      return getChatMessages(input.channel, input.limit);
    }),

  sendMessage: protectedProcedure
    .input(z.object({
      channel: z.string().default("global"),
      message: z.string().min(1).max(500),
    }))
    .mutation(async ({ ctx, input }) => {
      if (ctx.user.isBanned) throw new Error("Your account has been restricted");
      const db = await getDb();
      if (!db) throw new Error("DB unavailable");
      // Basic profanity/spam check
      const badWords = ["spam", "scam", "hack"];
      const lowerMsg = input.message.toLowerCase();
      if (badWords.some(w => lowerMsg.includes(w))) throw new Error("Message contains prohibited content");
      await db.insert(chatMessages).values({ userId: ctx.user.id, channel: input.channel, message: input.message });
      return { success: true };
    }),

  deleteMessage: protectedProcedure
    .input(z.object({ messageId: z.number() }))
    .mutation(async ({ ctx, input }) => {
      if (ctx.user.role !== "admin" && ctx.user.role !== "staff") throw new Error("Unauthorized");
      const db = await getDb();
      if (!db) throw new Error("DB unavailable");
      await db.update(chatMessages).set({ isDeleted: true }).where(eq(chatMessages.id, input.messageId));
      return { success: true };
    }),
});
