import * as _walkeros_core_dev from '@walkeros/core/dev';
import { z } from '@walkeros/core/dev';
import { DestinationWeb } from '@walkeros/web-core';
import { Flow } from '@walkeros/core';

/**
 * Snowplow-specific settings schema (similar to GA4Settings in gtag)
 */
declare const SnowplowSettingsSchema: z.ZodObject<{
    actionSchema: z.ZodOptional<z.ZodString>;
    productSchema: z.ZodOptional<z.ZodString>;
    cartSchema: z.ZodOptional<z.ZodString>;
    transactionSchema: z.ZodOptional<z.ZodString>;
    refundSchema: z.ZodOptional<z.ZodString>;
    checkoutStepSchema: z.ZodOptional<z.ZodString>;
    promotionSchema: z.ZodOptional<z.ZodString>;
    userSchema: z.ZodOptional<z.ZodString>;
    customSchemas: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
    currency: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
/**
 * Tracker contexts schema
 */
declare const TrackerContextsSchema: z.ZodObject<{
    webPage: z.ZodOptional<z.ZodBoolean>;
    session: z.ZodOptional<z.ZodBoolean>;
    performanceTiming: z.ZodOptional<z.ZodBoolean>;
    geolocation: z.ZodOptional<z.ZodBoolean>;
}, z.core.$strip>;
/**
 * URL-based plugin schema
 */
declare const UrlBasedPluginSchema: z.ZodObject<{
    url: z.ZodString;
    name: z.ZodTuple<[z.ZodString, z.ZodString], null>;
    enableMethod: z.ZodOptional<z.ZodString>;
    options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
}, z.core.$strip>;
/**
 * Activity tracking configuration schema
 */
declare const ActivityTrackingSchema: z.ZodObject<{
    minimumVisitLength: z.ZodNumber;
    heartbeatDelay: z.ZodNumber;
}, z.core.$strip>;
/**
 * Configuration settings schema for Snowplow destination
 */
declare const SettingsSchema: z.ZodObject<{
    collectorUrl: z.ZodOptional<z.ZodString>;
    appId: z.ZodOptional<z.ZodString>;
    trackerName: z.ZodOptional<z.ZodString>;
    platform: z.ZodOptional<z.ZodString>;
    pageViewTracking: z.ZodOptional<z.ZodBoolean>;
    snowplow: z.ZodOptional<z.ZodObject<{
        actionSchema: z.ZodOptional<z.ZodString>;
        productSchema: z.ZodOptional<z.ZodString>;
        cartSchema: z.ZodOptional<z.ZodString>;
        transactionSchema: z.ZodOptional<z.ZodString>;
        refundSchema: z.ZodOptional<z.ZodString>;
        checkoutStepSchema: z.ZodOptional<z.ZodString>;
        promotionSchema: z.ZodOptional<z.ZodString>;
        userSchema: z.ZodOptional<z.ZodString>;
        customSchemas: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
        currency: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
    discoverRootDomain: z.ZodOptional<z.ZodBoolean>;
    cookieSameSite: z.ZodOptional<z.ZodEnum<{
        Strict: "Strict";
        Lax: "Lax";
        None: "None";
    }>>;
    appVersion: z.ZodOptional<z.ZodString>;
    contexts: z.ZodOptional<z.ZodObject<{
        webPage: z.ZodOptional<z.ZodBoolean>;
        session: z.ZodOptional<z.ZodBoolean>;
        performanceTiming: z.ZodOptional<z.ZodBoolean>;
        geolocation: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>>;
    anonymousTracking: z.ZodOptional<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
        withServerAnonymisation: z.ZodOptional<z.ZodBoolean>;
        withSessionTracking: z.ZodOptional<z.ZodBoolean>;
    }, z.core.$strip>]>>;
    plugins: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
        url: z.ZodString;
        name: z.ZodTuple<[z.ZodString, z.ZodString], null>;
        enableMethod: z.ZodOptional<z.ZodString>;
        options: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
    }, z.core.$strip>, z.ZodAny]>>>;
    activityTracking: z.ZodOptional<z.ZodObject<{
        minimumVisitLength: z.ZodNumber;
        heartbeatDelay: z.ZodNumber;
    }, z.core.$strip>>;
    globalContexts: z.ZodOptional<z.ZodArray<z.ZodAny>>;
}, z.core.$strip>;
type Settings = z.infer<typeof SettingsSchema>;
type SnowplowSettings = z.infer<typeof SnowplowSettingsSchema>;
type TrackerContexts = z.infer<typeof TrackerContextsSchema>;
type UrlBasedPlugin = z.infer<typeof UrlBasedPluginSchema>;
type ActivityTracking = z.infer<typeof ActivityTrackingSchema>;

/**
 * Per-event Snowplow settings override schema
 */
declare const SnowplowMappingSettingsSchema: z.ZodObject<{
    actionSchema: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
/**
 * Custom mapping parameters schema for Snowplow events
 *
 * Use the standard `name` field from mapping rules for the action type.
 * The `name` maps to Snowplow's event.data.type.
 */
declare const MappingSchema: z.ZodObject<{
    context: z.ZodOptional<z.ZodArray<z.ZodObject<{
        schema: z.ZodString;
        data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
    }, z.core.$strip>>>;
    snowplow: z.ZodOptional<z.ZodObject<{
        actionSchema: z.ZodOptional<z.ZodString>;
    }, z.core.$strip>>;
}, z.core.$strip>;
type Mapping = z.infer<typeof MappingSchema>;
type SnowplowMappingSettings = z.infer<typeof SnowplowMappingSettingsSchema>;

declare const settings: _walkeros_core_dev.JSONSchema;
declare const mapping: _walkeros_core_dev.JSONSchema;

type index$1_ActivityTracking = ActivityTracking;
declare const index$1_ActivityTrackingSchema: typeof ActivityTrackingSchema;
type index$1_Mapping = Mapping;
declare const index$1_MappingSchema: typeof MappingSchema;
type index$1_Settings = Settings;
declare const index$1_SettingsSchema: typeof SettingsSchema;
type index$1_SnowplowMappingSettings = SnowplowMappingSettings;
type index$1_SnowplowSettings = SnowplowSettings;
type index$1_TrackerContexts = TrackerContexts;
declare const index$1_TrackerContextsSchema: typeof TrackerContextsSchema;
type index$1_UrlBasedPlugin = UrlBasedPlugin;
declare const index$1_UrlBasedPluginSchema: typeof UrlBasedPluginSchema;
declare const index$1_mapping: typeof mapping;
declare const index$1_settings: typeof settings;
declare namespace index$1 {
  export { type index$1_ActivityTracking as ActivityTracking, index$1_ActivityTrackingSchema as ActivityTrackingSchema, type index$1_Mapping as Mapping, index$1_MappingSchema as MappingSchema, type index$1_Settings as Settings, index$1_SettingsSchema as SettingsSchema, type index$1_SnowplowMappingSettings as SnowplowMappingSettings, type index$1_SnowplowSettings as SnowplowSettings, type index$1_TrackerContexts as TrackerContexts, index$1_TrackerContextsSchema as TrackerContextsSchema, type index$1_UrlBasedPlugin as UrlBasedPlugin, index$1_UrlBasedPluginSchema as UrlBasedPluginSchema, index$1_mapping as mapping, index$1_settings as settings };
}

declare global {
    interface Window {
        snowplow?: SnowplowFunction;
        GlobalSnowplowNamespace?: string;
    }
}
interface SnowplowFunction {
    (...args: unknown[]): void;
    q?: unknown[];
}
/**
 * Environment dependencies for Snowplow destination
 */
interface Env extends DestinationWeb.Env {
    window: {
        snowplow?: SnowplowFunction;
    };
}

declare const init: Env | undefined;
declare const push: Env;
declare const simulation: string[];

declare const env_init: typeof init;
declare const env_push: typeof push;
declare const env_simulation: typeof simulation;
declare namespace env {
  export { env_init as init, env_push as push, env_simulation as simulation };
}

declare const productView: Flow.StepExample;
declare const addToCart: Flow.StepExample;
declare const transaction: Flow.StepExample;
declare const promoView: Flow.StepExample;
declare const pageView: Flow.StepExample;
declare const checkoutStep: Flow.StepExample;
declare const structuredEvent: Flow.StepExample;
declare const contextLoop: Flow.StepExample;

declare const step_addToCart: typeof addToCart;
declare const step_checkoutStep: typeof checkoutStep;
declare const step_contextLoop: typeof contextLoop;
declare const step_pageView: typeof pageView;
declare const step_productView: typeof productView;
declare const step_promoView: typeof promoView;
declare const step_structuredEvent: typeof structuredEvent;
declare const step_transaction: typeof transaction;
declare namespace step {
  export { step_addToCart as addToCart, step_checkoutStep as checkoutStep, step_contextLoop as contextLoop, step_pageView as pageView, step_productView as productView, step_promoView as promoView, step_structuredEvent as structuredEvent, step_transaction as transaction };
}

declare const index_env: typeof env;
declare const index_step: typeof step;
declare namespace index {
  export { index_env as env, index_step as step };
}

export { index as examples, index$1 as schemas };
