/** * Ads Types * * Tipos e interfaces para el servicio de Google AdSense. * Simplificado para usar AdSense en lugar de GPT (Ad Manager). */ /** * Configuracion del servicio de Ads. * Pasada a provideValtechAds() en el bootstrap de la aplicacion. */ export interface ValtechAdsConfig { /** Publisher ID de AdSense (formato: ca-pub-XXXXXXXXXXXXXXXX) */ adClient: string; /** Habilitar modo debug (muestra info de ads en consola) */ debugMode?: boolean; /** Test mode - usa ads de prueba durante desarrollo */ testMode?: boolean; /** Habilitar Auto Ads (Google decide ubicacion automaticamente) */ autoAds?: boolean; /** Callback cuando se carga un ad */ onAdLoaded?: (slotId: string, isEmpty: boolean) => void; /** Callback cuando falla un ad */ onAdError?: (slotId: string, error: Error) => void; /** Rutas donde NO mostrar ads (regex patterns) */ excludeRoutes?: string[]; } /** * Formato de ad para AdSense. */ export type AdFormat = 'auto' | 'fluid' | 'rectangle' | 'horizontal' | 'vertical'; /** * Configuracion de un ad slot individual. */ export interface AdSlotConfig { /** ID unico del slot (usado para el div container) */ slotId: string; /** Ad Slot ID de AdSense (numero de unidad de anuncio) */ adSlot?: string; /** Formato del ad */ format?: AdFormat; /** Responsive - ocupa todo el ancho disponible */ fullWidth?: boolean; /** CSS class adicional */ cssClass?: string; /** Altura minima mientras carga */ minHeight?: string; /** Mostrar skeleton mientras carga */ showSkeleton?: boolean; } /** * Estado de un ad slot. */ export type AdSlotState = 'idle' | 'loading' | 'rendered' | 'empty' | 'hidden' | 'error'; /** * Evento emitido por el servicio de ads. */ export interface AdEvent { type: 'loaded' | 'empty' | 'error' | 'viewable' | 'clicked'; slotId: string; timestamp: Date; isEmpty?: boolean; error?: Error; } /** * Estado de consent para ads (mapeado desde AnalyticsService). */ export interface AdsConsentState { /** Permite almacenamiento de ads */ adStorage: boolean; /** Permite personalizacion de ads */ adPersonalization: boolean; /** Permite datos de usuario para ads */ adUserData: boolean; } /** AdSense global array */ export type AdSenseCommand = Record; declare global { interface Window { adsbygoogle?: AdSenseCommand[]; googletag?: GoogleTag; } } /** Google Publisher Tags (GPT) interface */ export interface GoogleTag { cmd: Array<() => void>; pubads(): GoogleTagPubAds; } /** GPT PubAds service */ export interface GoogleTagPubAds { setRequestNonPersonalizedAds(value: 0 | 1): void; } /** * @deprecated Use AdFormat instead */ export type AdSlotSize = 'leaderboard' | 'billboard' | 'medium-rectangle' | 'large-rectangle' | 'half-page' | 'skyscraper' | 'mobile-banner' | 'mobile-leaderboard' | 'fluid' | 'native' | 'custom'; /** * @deprecated AdSense handles sizes automatically */ export declare const AD_SIZE_MAP: Record; /** * @deprecated Not used with AdSense */ export interface SizeMapping { viewportWidth: number; sizes: ([number, number] | 'fluid')[]; }