import LoginClient from "@/app/login/login-client";
import BoletinsListClient from "./list-client";
import { createAdminClient } from "@/lib/supabase-admin";
import { createClient } from "@/lib/supabase-server";
import { isOwnerUser } from "@/lib/owner-auth";
import { baseDosBoletins } from "@/lib/boletins";

export default async function OwnerBoletinsPage() {
  const supabase = await createClient();
  const {
    data: { user },
  } = await supabase.auth.getUser();

  if (!user) return <LoginClient />;

  if (!isOwnerUser({ id: user.id, email: user.email })) {
    return (
      <div className="min-h-screen flex items-center justify-center p-6 bg-slate-50">
        <div className="w-full max-w-lg rounded-2xl bg-white p-8 shadow-sm border border-slate-200 text-center">
          <h1 className="text-xl font-semibold text-slate-900">Acesso negado</h1>
          <p className="text-sm text-slate-500 mt-2">Seu usuário não tem permissão para acessar este painel.</p>
        </div>
      </div>
    );
  }

  const admin = createAdminClient();
  const { data } = await admin
    .from("system_bulletins")
    .select("id,slug,title,subtitle,tag,status,published_at,updated_at,body_html")
    .order("updated_at", { ascending: false })
    .limit(300);

  const boletins = (data ?? []).map((linha) => ({
    id: String(linha.id),
    slug: String(linha.slug),
    title: String(linha.title),
    subtitle: (linha.subtitle as string | null) ?? null,
    tag: (linha.tag as string | null) ?? null,
    status: String(linha.status),
    published_at: (linha.published_at as string | null) ?? null,
    updated_at: (linha.updated_at as string | null) ?? null,
    /* O peso do texto, e não o texto: a listagem não precisa carregar o corpo
       inteiro de trinta boletins para mostrar "3 min de leitura". */
    palavras: String(linha.body_html || "").replace(/<[^>]*>/g, " ").split(/\s+/).filter(Boolean).length,
  }));

  return <BoletinsListClient initialRows={boletins} base={baseDosBoletins()} />;
}
