/**
 * 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<string, unknown>;
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<AdSlotSize, [number, number] | 'fluid'>;
/**
 * @deprecated Not used with AdSense
 */
export interface SizeMapping {
    viewportWidth: number;
    sizes: ([number, number] | 'fluid')[];
}
