import { NextResponse } from "next/server";

import { ajustesDaEmpresa, gravarConfirmacao, type Confirmacao } from "@/lib/assistentes/ajustes";
import { acessoDoPainel, pedidoDaPropriaTela, recusaDoPainel } from "@/lib/assistentes/painel";

export const runtime = "nodejs";

/*
 * Quando o assistente pede a prévia com código antes de gravar (migration 185).
 * Todos com acesso à aba veem; só dono e admin mudam.
 */
export async function GET() {
  const acesso = await acessoDoPainel();
  if (!acesso.ok) return recusaDoPainel(acesso.motivo);
  const ajustes = await ajustesDaEmpresa([acesso.empresa.companyId, acesso.empresa.ownerId]);
  return NextResponse.json({ confirmacao: ajustes.confirmacao, podeMudar: acesso.verTodas }, { headers: { "Cache-Control": "no-store" } });
}

export async function POST(request: Request) {
  const acesso = await acessoDoPainel();
  if (!acesso.ok) return recusaDoPainel(acesso.motivo);
  if (!pedidoDaPropriaTela(request)) return NextResponse.json({ error: "Pedido de fora da tela." }, { status: 403 });
  if (!acesso.verTodas) return NextResponse.json({ error: "Só o dono ou um administrador muda esta escolha." }, { status: 403 });

  const corpo = (await request.json().catch(() => null)) as { confirmacao?: unknown } | null;
  const confirmacao: Confirmacao | null = corpo?.confirmacao === "sempre" ? "sempre" : corpo?.confirmacao === "sensivel" ? "sensivel" : null;
  if (!confirmacao) return NextResponse.json({ error: "Escolha inválida." }, { status: 400 });

  try {
    await gravarConfirmacao([acesso.empresa.companyId, acesso.empresa.ownerId], confirmacao, acesso.user.id);
    return NextResponse.json({ ok: true, confirmacao });
  } catch (erro) {
    console.error("[assistentes] gravar confirmação", erro instanceof Error ? erro.message : erro);
    return NextResponse.json({ error: "Não foi possível salvar agora." }, { status: 500 });
  }
}
