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

export type PopupRow = {
  id: string;
  title: string;
  message: string | null;
  image_url: string | null;
  image_url_mobile: string | null;
  image_side: string;
  background_color: string;
  text_color: string;
  cta_label: string | null;
  cta_url: string | null;
  cta_new_tab: boolean;
  require_ack: boolean;
  ack_label: string | null;
  frequency: string;
  audience: string;
  active: boolean;
  start_at: string | null;
  end_at: string | null;
  created_at: string | null;
  updated_at: string | null;
};

const CAMPOS =
  "id,title,message,image_url,image_url_mobile,image_side,background_color,text_color,cta_label,cta_url,cta_new_tab,require_ack,ack_label,frequency,audience,active,start_at,end_at,created_at,updated_at";

export default async function OwnerPopupsPage() {
  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_popups").select(CAMPOS).order("created_at", { ascending: false }).limit(500);
  const popups = (data || []) as PopupRow[];

  /* Quantas empresas cada popup alcança, para a listagem dizer "3 empresas"
     sem abrir o cadastro. */
  const contagem = new Map<string, number>();
  const ids = popups.map((linha) => linha.id);
  if (ids.length > 0) {
    const { data: vinculos } = await admin.from("system_popup_companies").select("popup_id").in("popup_id", ids);
    for (const vinculo of vinculos ?? []) {
      const chave = String(vinculo.popup_id);
      contagem.set(chave, (contagem.get(chave) ?? 0) + 1);
    }
  }

  return (
    <PopupsListClient initialRows={popups.map((linha) => ({ ...linha, companies_count: contagem.get(linha.id) ?? 0 }))} />
  );
}
