// This file was auto-generated by Fern from our API Definition.

import type * as Intercom from "../index.js";

/**
 * Visitors are useful for representing anonymous people that have not yet been identified. They usually represent website visitors. Visitors are not visible in Intercom platform. The Visitors resource provides methods to fetch, update, convert and delete.
 */
export interface Visitor {
    /** Value is 'visitor' */
    type: "visitor";
    /** The Intercom defined id representing the Visitor. */
    id: string;
    /** Automatically generated identifier for the Visitor. */
    user_id: string;
    /** Identifies if this visitor is anonymous. */
    anonymous?: boolean;
    /** The email of the visitor. */
    email?: string;
    /** The phone number of the visitor. */
    phone?: string;
    /** The name of the visitor. */
    name?: string;
    /** The pseudonym of the visitor. */
    pseudonym?: string;
    avatar?: Visitor.Avatar;
    /** The id of the app the visitor is associated with. */
    app_id?: string;
    companies?: Visitor.Companies;
    location_data?: Visitor.LocationData;
    /** The time the Lead last recorded making a request. */
    las_request_at?: number;
    /** The time the Visitor was added to Intercom. */
    created_at?: number;
    /** The time the Visitor was added to Intercom. */
    remote_created_at?: number;
    /** The time the Visitor signed up for your product. */
    signed_up_at?: number;
    /** The last time the Visitor was updated. */
    updated_at?: number;
    /** The number of sessions the Visitor has had. */
    session_count?: number;
    social_profiles?: Visitor.SocialProfiles;
    /** The id of the admin that owns the Visitor. */
    owner_id?: string;
    /** Whether the Visitor is unsubscribed from emails. */
    unsubscribed_from_emails?: boolean;
    /** Identifies if this visitor has marked an email as spam. */
    marked_email_as_spam?: boolean;
    /** Identifies if this visitor has had a hard bounce. */
    has_hard_bounced?: boolean;
    tags?: Visitor.Tags;
    segments?: Visitor.Segments;
    /** The custom attributes you have set on the Visitor. */
    custom_attributes?: Record<string, unknown>;
    /** The referer of the visitor. */
    referrer?: string;
    /** The utm_campaign of the visitor. */
    utm_campaign?: string;
    /** The utm_content of the visitor. */
    utm_content?: string;
    /** The utm_medium of the visitor. */
    utm_medium?: string;
    /** The utm_source of the visitor. */
    utm_source?: string;
    /** The utm_term of the visitor. */
    utm_term?: string;
    /** Identifies if this visitor has do not track enabled. */
    do_not_track?: boolean;
}

export namespace Visitor {
    export interface Avatar {
        /** */
        type?: string;
        /** This object represents the avatar associated with the visitor. */
        image_url?: string;
    }

    export interface Companies {
        /** The type of the object */
        type?: "company.list";
        companies?: Intercom.Company[];
    }

    export interface LocationData {
        /** */
        type?: string;
        /** The city name of the visitor. */
        city_name?: string;
        /** The continent code of the visitor. */
        continent_code?: string;
        /** The country code of the visitor. */
        country_code?: string;
        /** The country name of the visitor. */
        country_name?: string;
        /** The postal code of the visitor. */
        postal_code?: string;
        /** The region name of the visitor. */
        region_name?: string;
        /** The timezone of the visitor. */
        timezone?: string;
    }

    export interface SocialProfiles {
        /** The type of the object */
        type?: "social_profile.list";
        social_profiles?: string[];
    }

    export interface Tags {
        /** The type of the object */
        type?: "tag.list";
        tags?: Tags.Tags.Item[];
    }

    export namespace Tags {
        export type Tags = Tags.Item[];

        export namespace Tags {
            export interface Item {
                /** The type of the object */
                type?: "tag";
                /** The id of the tag. */
                id?: string;
                /** The name of the tag. */
                name?: string;
            }
        }
    }

    export interface Segments {
        /** The type of the object */
        type?: "segment.list";
        segments?: string[];
    }
}
