import LoginClient from "@/app/login/login-client";
import EditorDoArtigo from "./editor-client";
import { createAdminClient } from "@/lib/supabase-admin";
import { createClient } from "@/lib/supabase-server";
import { isOwnerUser } from "@/lib/owner-auth";
import { baseDoHelp, CAMPOS_DA_SECAO, CAMPOS_DO_ARTIGO } from "@/lib/help";
import type { Artigo, Secao } from "@/lib/help";

/**
 * A folha de escrita do artigo.
 *
 * `/aprender/novo` e `/aprender/<id>` são a mesma tela: a diferença é só o
 * artigo já existir ou não. Duas rotas seriam dois editores para manter
 * iguais, e eles desandariam na primeira mudança feita num só.
 */

export const dynamic = "force-dynamic";

type Props = {
  params: Promise<{ id: string }>;
  searchParams: Promise<Record<string, string | string[] | undefined>>;
};

function primeiro(valor: string | string[] | undefined) {
  return typeof valor === "string" ? valor : Array.isArray(valor) ? valor[0] ?? "" : "";
}

export default async function EditorDeArtigoPage({ params, searchParams }: Props) {
  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 { id } = await params;
  const busca = await searchParams;
  const admin = createAdminClient();

  const { data: secoes } = await admin
    .from("help_sections")
    .select(CAMPOS_DA_SECAO)
    .order("position", { ascending: true });

  let inicial: Artigo | null = null;
  if (id && id !== "novo") {
    const { data } = await admin.from("help_articles").select(CAMPOS_DO_ARTIGO).eq("id", id).maybeSingle();
    inicial = (data as Artigo | null) ?? null;
  }

  return (
    <EditorDoArtigo
      inicial={inicial}
      secoes={(secoes ?? []) as Secao[]}
      base={baseDoHelp()}
      /* Vindos do atalho "escrever artigo" da lista de buscas sem resposta: a
         pauta chega com o título e a palavra-chave já preenchidos. */
      sugestaoDeSecao={primeiro(busca.secao)}
      sugestaoDeTitulo={primeiro(busca.titulo)}
      sugestaoDeTermo={primeiro(busca.termo)}
    />
  );
}
