import type { ContextoDigital } from "../contexto";
import { contarComentarios, FILTROS_DE_COMENTARIOS, listarComentarios, type FiltroDeComentarios } from "../comentarios";

/*
 * A lista de comentários como a tela Comentários pede (app/api/digitais/comentarios),
 * fora da rota: o assistente (MCP) lê a mesma coisa.
 */
export async function comentariosParaResponder(
  { admin, lojaId, user, pode }: ContextoDigital,
  params: { filtro?: string | null; cursoId?: string | null; antes?: string | null }
) {
  const bruto = params.filtro as FiltroDeComentarios | null | undefined;
  const filtro: FiltroDeComentarios = bruto && FILTROS_DE_COMENTARIOS.includes(bruto) ? bruto : "sem_resposta";
  const [perfil, cursos, contagem] = await Promise.all([
    admin.from("profiles").select("catalog_name,store_name").eq("id", lojaId).maybeSingle(),
    admin
      .from("products")
      .select("id,name")
      .eq("user_id", lojaId)
      .eq("product_kind", "digital")
      .eq("digital_config->>tipo", "curso")
      .order("name", { ascending: true })
      .limit(300),
    contarComentarios(admin, lojaId),
  ]);
  const linhaDoPerfil = perfil.data as { catalog_name?: string | null; store_name?: string | null } | null;
  const nomeDaLoja = String(linhaDoPerfil?.catalog_name || linhaDoPerfil?.store_name || "Loja");
  const lista = await listarComentarios(admin, {
    lojaId,
    eu: user.id,
    nomeDaLoja,
    filtro,
    cursoId: params.cursoId ?? null,
    antes: params.antes ?? null,
  });
  return {
    podeResponder: pode("digital.comments.write"),
    nomeDaLoja,
    contagem,
    cursos: ((cursos.data ?? []) as Array<{ id: string; name: string }>).map((c) => ({ id: c.id, nome: c.name })),
    ...lista,
  };
}
