import { Index } from '../../utils';
import { Customizable } from '../core/common/Customizable';
export type UserActivityTypeEnum = 'SITE_VISIT' | 'APP_VISIT' | 'TOUCH' | 'EMAIL' | 'DISPLAY_AD' | 'RECOMMENDER';
export type UserActivitySessionStatusEnum = 'NO_SESSION' | 'IN_SESSION' | 'CLOSED_SESSION' | 'SESSION_SNAPSHOT';
export type LocationSourceEnum = 'GPS' | 'IP' | 'OTHER';
export interface EmailHash {
    $hash: string;
    $email?: string;
}
export interface UserActivity extends Customizable {
    $ts?: number;
    $type: UserActivityTypeEnum;
    $session_status: UserActivitySessionStatusEnum;
    $ttl?: number;
    $user_agent_id?: string;
    $user_account_id?: string;
    $compartment_id?: string;
    $email_hash?: EmailHash;
    $origin?: UserActivityOrigin;
    $location?: UserActivityLocation;
    $events: UserActivityEvent[];
    $user_identifiers?: UserIdentifierResource[];
}
export interface UserAccountIdentifierResource {
    $type: 'USER_ACCOUNT';
    $user_account_id: string;
    $compartment_id: string;
}
export interface UserEmailIdentifierResource {
    $type: 'USER_EMAIL';
    $hash: string;
    $email?: string;
}
export interface UserAgentIdentifierResource {
    $type: 'USER_AGENT';
    $user_agent_id: string;
}
export type UserIdentifierResource = UserAccountIdentifierResource | UserEmailIdentifierResource | UserAgentIdentifierResource;
export interface UserVisitActivity extends UserActivity {
    $session_duration?: number;
    $topics?: Map<string, Map<string, number>>;
    $site_id?: string;
    $app_id?: string;
}
export interface UserActivityOrigin extends Customizable {
    $campaign_id?: number;
    $campaign_name?: string;
    $channel?: string;
    $creative_id?: number;
    $creative_name?: string;
    $engagement_content_id?: string;
    $gclid?: string;
    $keywords?: string;
    $log_id?: string;
    $message_id?: number;
    $message_technical_name?: string;
    $referral_path?: string;
    $social_network?: string;
    $source?: string;
    $sub_campaign_id?: number;
    $sub_campaign_technical_name?: string;
    $ts?: number;
}
export interface UserActivityLocation extends Customizable {
    $source?: LocationSourceEnum;
    $country?: string;
    $region?: string;
    $iso_region?: string;
    $city?: string;
    $iso_city?: string;
    $zip_code?: string;
    $latlon: number[];
}
export interface CampaignTrackingProperties extends Customizable {
    $campaign_technical_name?: string;
    $sub_campaign_technical_name?: string;
    $message_technical_name?: string;
    $creative_technical_name?: string;
    $campaign_id?: number;
    $sub_campaign_id?: number;
    $message_id?: number;
    $creative_id?: number;
}
export interface ConversionProperties extends Customizable {
    $conversion_id?: string;
    $goal_id?: number;
    $conversion_technical_id?: string;
    $goal_technical_id?: string;
    $conversion_value?: number;
    $log_id?: string;
    $conversion_external_id?: string;
    $goal_technical_name?: string;
}
export type PlatformEventName = '$ad_click' | '$ad_view' | '$conversion' | '$category_view' | '$page_view' | '$home_view' | '$item_view' | '$item_list_view' | '$product_view' | '$product_list_view' | '$basket_view' | '$transaction_confirmed' | '$email_view' | '$email_click' | '$email_sent' | '$email_delivered' | '$email_soft_bounce' | '$email_hard_bounce' | '$email_unsubscribe' | '$email_complaint' | '$set_user_profile_properties' | '$content_corrections';
export type EventName = PlatformEventName | string;
export type UserActivityEvent = AdClickEvent | AdViewEvent | ConversionEvent | GenericUserActivityEvent;
export interface AdClickEvent {
    $ts: number;
    $event_name: '$ad_click';
    $properties: CampaignTrackingProperties;
}
export interface AdViewEvent {
    $ts: number;
    $event_name: '$ad_view';
    $properties: CampaignTrackingProperties;
}
export interface ConversionEvent {
    $ts: number;
    $event_name: '$conversion';
    $properties: ConversionProperties;
}
export interface GenericUserActivityEvent {
    $ts: number;
    $event_name: EventName;
    $properties: Index<unknown>;
}
