"use server";

import { revalidatePath } from "next/cache";
import { db } from "@/lib/db";
import { requireUser } from "@/lib/auth";
import { audit } from "@/lib/audit";

export async function submitQuestionAction(conferenceId: string, question: string) {
  const user = await requireUser();
  const text = question.trim().slice(0, 500);
  if (text.length < 5) return { ok: false, error: "Question is too short." };
  await db.liveQuestion.create({
    data: { conferenceId, userId: user.id, name: user.name, question: text },
  });
  await audit({ userId: user.id, conferenceId, action: "live.question.submit" });
  return { ok: true };
}

export async function addNoteAction(conferenceId: string, updateId: string | null, text: string | null) {
  const user = await requireUser();
  if (!updateId && !text?.trim()) return { ok: false };
  const note = await db.liveNote.create({
    data: { userId: user.id, conferenceId, updateId, text: text?.trim() || null },
    include: { update: { select: { title: true, type: true } } },
  });
  return { ok: true, note: { id: note.id, text: note.text, title: note.update?.title ?? null, at: note.createdAt.toISOString() } };
}

export async function removeNoteAction(noteId: string) {
  const user = await requireUser();
  await db.liveNote.deleteMany({ where: { id: noteId, userId: user.id } });
  return { ok: true };
}

export async function followSessionAction(sessionId: string) {
  const user = await requireUser();
  try {
    await db.scheduleItem.create({ data: { userId: user.id, sessionId } });
  } catch { /* already following */ }
  revalidatePath("/me/schedule");
  return { ok: true };
}
