import db from "../../db";
import {
  chatMessages,
  type NewChatMessage,
} from "../../db/schema/chatMessages";
import { eq, desc, sql } from "drizzle-orm";

/**
 * Сохранить новое сообщение в чате
 */
export async function saveChatMessage(message: NewChatMessage) {
  try {
    console.log("[saveChatMessage] Attempting to insert message:", message);
    const [newMessage] = await db
      .insert(chatMessages)
      .values(message)
      .returning();
    console.log("[saveChatMessage] Message inserted successfully:", newMessage);
    return newMessage;
  } catch (error) {
    console.error("[saveChatMessage] Database error:", error);
    throw error;
  }
}

/**
 * Получить историю сообщений для сессии
 * @param sessionId ID сессии
 * @param limit Максимальное количество сообщений (по умолчанию 100)
 */
export async function getChatHistory(sessionId: string, limit = 100) {
  const messages = await db
    .select({
      id: chatMessages.id,
      // senderId - это либо userId (для авторизованных), либо guestId (для гостей)
      senderId: sql<string>`COALESCE(${chatMessages.userId}, ${chatMessages.guestId})`.as('senderId'),
      senderName: chatMessages.senderName,
      content: chatMessages.content,
      timestamp: chatMessages.createdAt,
      type: chatMessages.type,
    })
    .from(chatMessages)
    .where(eq(chatMessages.sessionId, sessionId))
    .orderBy(desc(chatMessages.createdAt))
    .limit(limit);

  // Возвращаем в правильном порядке (старые сначала)
  return messages.reverse();
}

/**
 * Удалить все сообщения для сессии
 * @param sessionId ID сессии
 */
export async function deleteChatHistory(sessionId: string) {
  await db.delete(chatMessages).where(eq(chatMessages.sessionId, sessionId));
}
