import { ehDaEquipe } from "@/lib/live/regras";
import { lerCorpo, rotaDeQuemEsta } from "@/lib/live/servidor/rota";
import { ErroDaLive } from "@/lib/live/servidor/sala";
import { assinarTexto } from "@/lib/live/sinal";

export const runtime = "nodejs";

/*
 * A licença da caneta. O navegador de quem apresenta cria um par de chaves só
 * dele e o servidor assina "esta chave pode riscar nesta sala por 4 h". Cada
 * risco sai assinado por ela e quem assiste confere: ninguém de fora desenha
 * na tela dos outros.
 *
 * Pode riscar quem é da equipe (organiza ou apresenta junto) e, na reunião,
 * quem está mostrando a tela agora.
 */
export async function POST(req: Request, { params }: { params: Promise<{ salaId: string }> }) {
  const { salaId } = await params;
  return rotaDeQuemEsta(req, salaId, async ({ admin, sala, eu }) => {
    const mostrandoATela = Boolean(eu.trilhas?.tela);
    if (!ehDaEquipe(eu.papel) && !(sala.participacao === "livre" && mostrandoATela)) {
      throw new ErroDaLive("A caneta é de quem está apresentando a tela.", 403, { motivo: "sem_permissao" });
    }
    const corpo = await lerCorpo(req);
    const chave = corpo.chave as { x?: unknown; y?: unknown } | null;
    const parte = (v: unknown) => typeof v === "string" && /^[A-Za-z0-9_-]{43}$/.test(v);
    if (!chave || !parte(chave.x) || !parte(chave.y)) throw new ErroDaLive("Chave inválida.", 400);
    const d = JSON.stringify({ sala: sala.id, participante: eu.id, x: chave.x, y: chave.y, ate: Date.now() + 4 * 3600 * 1000 });
    return { ok: true, licenca: { d, s: await assinarTexto(admin, d) } };
  });
}
