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

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

export async function GET() {
  return rotaFiscal(["fiscal.ver", "fiscal.configurar", "products.write"], async ({ admin, empresaId }) => {
    const { data, error } = await admin
      .from("fiscal_perfis")
      .select("id,nome,tipo,padrao,ativo,regras,created_at,updated_at")
      .eq("empresa_id", empresaId)
      .order("created_at");
    if (error) throw new Error(error.message);
    return { perfis: data ?? [] };
  });
}

export async function POST(req: Request) {
  return rotaFiscal("fiscal.configurar", async ({ admin, empresaId, ambiente }) => {
    const corpo = await lerCorpo(req);
    const perfil = await salvarPerfil(admin, {
      empresaId,
      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 };
  });
}
