import { Mapping } from '@elbwalker/types';
import { DestinationWeb } from '@elbwalker/walker.js';

declare global {
    interface Window {
        dataLayer: Array<unknown> | unknown;
        gtag: Gtag.Gtag;
    }
}
interface Destination extends DestinationWeb.Destination<Custom, CustomEvent> {
}
type Config = DestinationWeb.Config<Custom, CustomEvent>;
interface Custom {
    measurementId: string;
    debug?: boolean;
    include?: Include;
    pageview?: boolean;
    server_container_url?: string;
    snakeCase?: boolean;
    transport_url?: string;
}
type EventConfig = Mapping.EventConfig<CustomEvent>;
interface CustomEvent {
    include?: Include;
}
type Param = Mapping.Value;
type Include = Array<'all' | 'context' | 'data' | 'event' | 'globals' | 'source' | 'user' | 'version'>;
type Parameters = Gtag.ControlParams & Gtag.EventParams & Gtag.CustomParams;

type index_Config = Config;
type index_Custom = Custom;
type index_CustomEvent = CustomEvent;
type index_Destination = Destination;
type index_EventConfig = EventConfig;
type index_Include = Include;
type index_Param = Param;
type index_Parameters = Parameters;
declare namespace index {
  export type { index_Config as Config, index_Custom as Custom, index_CustomEvent as CustomEvent, index_Destination as Destination, index_EventConfig as EventConfig, index_Include as Include, index_Param as Param, index_Parameters as Parameters };
}

declare const destinationGoogleGA4: Destination;

export { index as DestinationGoogleGA4, destinationGoogleGA4 as default, destinationGoogleGA4 };
