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
* 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 }