import { pgTable, uuid, text, timestamp, pgEnum, varchar } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
import { createInsertSchema, createSelectSchema } from "drizzle-zod";
import { serverSessions } from "./serverSessions";
import { users } from "./users";

// Enum для типа сообщения
export const messageTypeEnum = pgEnum("message_type", ["text", "system"]);

export const chatMessages = pgTable("chat_messages", {
  id: uuid("id").primaryKey().defaultRandom(),
  sessionId: uuid("session_id")
    .notNull()
    .references(() => serverSessions.id, { onDelete: "cascade" }),
  userId: uuid("user_id").references(() => users.id), // Nullable для системных сообщений или анонимных пользователей
  guestId: uuid("guest_id"), // ID гостя (для неавторизованных пользователей)
  senderName: varchar("sender_name", { length: 255 }).notNull(), // Имя отправителя (из БД для авторизованных, "Guest" для неавторизованных)
  content: text("content").notNull(),
  type: messageTypeEnum("type").notNull().default("text"),
  createdAt: timestamp("created_at", { withTimezone: true })
    .defaultNow()
    .notNull(),
});

// Relations
export const chatMessagesRelations = relations(chatMessages, ({ one }) => ({
  session: one(serverSessions, {
    fields: [chatMessages.sessionId],
    references: [serverSessions.id],
  }),
  user: one(users, {
    fields: [chatMessages.userId],
    references: [users.id],
  }),
}));

// Zod schemas for validation
export const insertChatMessageSchema = createInsertSchema(chatMessages);
export const selectChatMessageSchema = createSelectSchema(chatMessages);

// Type exports
export type ChatMessage = typeof chatMessages.$inferSelect;
export type NewChatMessage = typeof chatMessages.$inferInsert;

