import { carregarEmissor } from "@/lib/fiscal/servidor/base";
import { excluirPerfil, recalcularStatus, salvarPerfil } from "@/lib/fiscal/servidor/emissor";
import { exigirUuid, lerCorpo, rotaFiscal } from "@/lib/fiscal/servidor/rota";

export const runtime = "nodejs";

type Contexto = { params: Promise<{ id: string }> };

export async function PUT(req: Request, { params }: Contexto) {
  const { id } = await params;
  return rotaFiscal("fiscal.configurar", async ({ admin, empresaId, ambiente }) => {
    const corpo = await lerCorpo(req);
    const perfil = await salvarPerfil(admin, {
      empresaId,
      id: exigirUuid(id, "Tributação"),
      nome: String(corpo.nome ?? ""),
      tipo: corpo.tipo === "servico" ? "servico" : "mercadoria",
      padrao: corpo.padrao === true,
      regras: corpo.regras && typeof corpo.regras === "object" ? (corpo.regras as Record<string, unknown>) : {},
    });
    const emissor = await carregarEmissor(admin, empresaId, ambiente);
    if (emissor) await recalcularStatus(admin, emissor);
    return { perfil };
  });
}

export async function DELETE(_req: Request, { params }: Contexto) {
  const { id } = await params;
  return rotaFiscal("fiscal.configurar", async ({ admin, empresaId, ambiente }) => {
    await excluirPerfil(admin, { empresaId, id: exigirUuid(id, "Tributação") });
    const emissor = await carregarEmissor(admin, empresaId, ambiente);
    if (emissor) await recalcularStatus(admin, emissor);
    return { ok: true };
  });
}
