import { getSession } from '@/lib/session'
import { isAdmin } from '@/lib/admin'
import { getAccountRankInfo } from '@/lib/account'

/**
 * Etiqueta de verificación de Google AdSense, con TRES interruptores:
 *
 * 1. `ADSENSE_CLIENT_ID` en el .env. Vacío o sin poner = no se emite nada. Es el
 *    interruptor del administrador. No lleva prefijo NEXT_PUBLIC_ a propósito:
 *    esto se renderiza en el servidor (el layout ya es dinámico porque <Header/>
 *    lee la sesión), así que no hace falta exponerlo al bundle del cliente.
 * 2. Admin (allowlist ADMIN_EMAILS o gmlevel de AzerothCore): sin etiqueta, para
 *    que la navegación del staff no cuente como tráfico con anuncios.
 * 3. Rango de la cuenta (ns-ranks, ver getAccountRank en lib/account.ts) y pagos:
 *    solo ve anuncios el rango 1 (Newbie, el de por defecto) que ADEMÁS nunca ha
 *    pagado. Son dos cortes distintos a propósito: cualquier pago confirmado por
 *    Stripe o SumUp los quita por mínimo que sea, y el mínimo de SumUp (0,20 € =
 *    20 PD) no llega a los 100 PD del rango 2, así que mirar solo el rango dejaría
 *    con anuncios a alguien que ya ha pagado.
 *
 * Ambas comprobaciones cortan en seco sin tocar la BD si no hay sesión, así que el
 * visitante anónimo (el caso normal) no paga ninguna consulta extra.
 *
 * Ojo: esto es solo la etiqueta de verificación de la cuenta, no carga adsbygoogle.js
 * ni escribe cookies, por eso no pasa por el banner de consentimiento. El día que se
 * añada el script de anuncios sí tendrá que ir detrás de la categoría «Marketing»
 * (useConsent('marketing'), ver components/Analytics.tsx).
 */
export async function AdSense() {
  const client = process.env.ADSENSE_CLIENT_ID
  if (!client) return null

  const session = await getSession()
  if (await isAdmin(session)) return null

  if (session.accountId) {
    const { level, donatedPD } = await getAccountRankInfo(session.accountId)
    if (level >= 2 || donatedPD > 0) return null
  }

  return <meta name="google-adsense-account" content={client} />
}
