import { NextResponse } from "next/server";

import { catalogoPublico } from "@/lib/paineis/metricas";
import { contextoDaRota, exigirEdicao, respostaDeErro } from "@/lib/paineis/rota";
import { criarPainel, listarPaineis } from "@/lib/paineis/servidor";

/* Lista os painéis da empresa (com o catálogo de métricas, para a tela de criar). */
export async function GET() {
  try {
    const { supabase, empresaId, podeEditar } = await contextoDaRota();
    const paineis = await listarPaineis(supabase, empresaId);
    return NextResponse.json({
      paineis: paineis.map((p) => ({
        id: p.id,
        nome: p.nome,
        descricao: p.descricao,
        quadros: p.widgets.length,
        metricas: [...new Set(p.widgets.map((w) => w.metrica))],
        atualizado_em: p.atualizado_em,
      })),
      podeEditar,
      metricas: catalogoPublico(),
    });
  } catch (erro) {
    return respostaDeErro(erro);
  }
}

export async function POST(req: Request) {
  try {
    const { supabase, user, empresaId, podeEditar } = await contextoDaRota();
    exigirEdicao(podeEditar);
    const corpo = ((await req.json().catch(() => null)) ?? {}) as Record<string, unknown>;
    const painel = await criarPainel(supabase, empresaId, user.id, { nome: corpo.nome, descricao: corpo.descricao, widgets: corpo.widgets ?? [] });
    return NextResponse.json({ painel }, { status: 201 });
  } catch (erro) {
    return respostaDeErro(erro);
  }
}
