import { lerCorpo, rotaDeQuemEsta } from "@/lib/live/servidor/rota";
import { ErroDaLive, ladoDaConexao } from "@/lib/live/servidor/sala";
import { configuracaoDoSfu, renegociar } from "@/lib/live/sfu";

export const runtime = "nodejs";

/* A resposta da tela à oferta que o SFU mandou (depois de receber trilhas novas). */
export async function POST(req: Request, { params }: { params: Promise<{ salaId: string }> }) {
  const { salaId } = await params;
  return rotaDeQuemEsta(req, salaId, async ({ eu }) => {
    const cfg = configuracaoDoSfu();
    if (!cfg) throw new ErroDaLive("A transmissão ainda está sendo ligada pela Ktalogu.", 503, { motivo: "sem_sfu" });
    const corpo = await lerCorpo(req);
    const sessao = ladoDaConexao(corpo.lado) === "recebe" ? eu.sfu_sessao_recebe : eu.sfu_sessao;
    if (!sessao) throw new ErroDaLive("Conecte o vídeo de novo.", 409, { motivo: "reconectar" });
    const sdp = typeof corpo.sdp === "string" && corpo.sdp.length < 200000 ? corpo.sdp : "";
    if (!sdp) throw new ErroDaLive("Resposta inválida.", 400);
    await renegociar(cfg, sessao, { type: "answer", sdp });
    return { ok: true };
  });
}
