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

import { AdminsClient } from "./api/resources/admins/client/Client.js";
import { AiContentClient } from "./api/resources/aiContent/client/Client.js";
import { ArticlesClient } from "./api/resources/articles/client/Client.js";
import { AwayStatusReasonsClient } from "./api/resources/awayStatusReasons/client/Client.js";
import { CallsClient } from "./api/resources/calls/client/Client.js";
import { CompaniesClient } from "./api/resources/companies/client/Client.js";
import { ContactsClient } from "./api/resources/contacts/client/Client.js";
import { ConversationsClient } from "./api/resources/conversations/client/Client.js";
import { CustomChannelEventsClient } from "./api/resources/customChannelEvents/client/Client.js";
import { CustomObjectInstancesClient } from "./api/resources/customObjectInstances/client/Client.js";
import { DataAttributesClient } from "./api/resources/dataAttributes/client/Client.js";
import { DataExportClient } from "./api/resources/dataExport/client/Client.js";
import { EventsClient } from "./api/resources/events/client/Client.js";
import { ExportClient } from "./api/resources/export/client/Client.js";
import { HelpCentersClient } from "./api/resources/helpCenters/client/Client.js";
import { InternalArticlesClient } from "./api/resources/internalArticles/client/Client.js";
import { IpAllowlistClient } from "./api/resources/ipAllowlist/client/Client.js";
import { JobsClient } from "./api/resources/jobs/client/Client.js";
import { MessagesClient } from "./api/resources/messages/client/Client.js";
import { NewsClient } from "./api/resources/news/client/Client.js";
import { NotesClient } from "./api/resources/notes/client/Client.js";
import { PhoneCallRedirectsClient } from "./api/resources/phoneCallRedirects/client/Client.js";
import { SegmentsClient } from "./api/resources/segments/client/Client.js";
import { SubscriptionTypesClient } from "./api/resources/subscriptionTypes/client/Client.js";
import { TagsClient } from "./api/resources/tags/client/Client.js";
import { TeamsClient } from "./api/resources/teams/client/Client.js";
import { TicketStatesClient } from "./api/resources/ticketStates/client/Client.js";
import { TicketsClient } from "./api/resources/tickets/client/Client.js";
import { TicketTypesClient } from "./api/resources/ticketTypes/client/Client.js";
import { UnstableClient } from "./api/resources/unstable/client/Client.js";
import { VisitorsClient } from "./api/resources/visitors/client/Client.js";
import type { BaseClientOptions, BaseRequestOptions } from "./BaseClient.js";
import { type NormalizedClientOptionsWithAuth, normalizeClientOptionsWithAuth } from "./BaseClient.js";

export declare namespace IntercomClient {
    export interface Options extends BaseClientOptions {}

    export interface RequestOptions extends BaseRequestOptions {}
}

export class IntercomClient {
    protected readonly _options: NormalizedClientOptionsWithAuth<IntercomClient.Options>;
    protected _admins: AdminsClient | undefined;
    protected _aiContent: AiContentClient | undefined;
    protected _articles: ArticlesClient | undefined;
    protected _awayStatusReasons: AwayStatusReasonsClient | undefined;
    protected _export: ExportClient | undefined;
    protected _dataExport: DataExportClient | undefined;
    protected _helpCenters: HelpCentersClient | undefined;
    protected _internalArticles: InternalArticlesClient | undefined;
    protected _ipAllowlist: IpAllowlistClient | undefined;
    protected _companies: CompaniesClient | undefined;
    protected _contacts: ContactsClient | undefined;
    protected _notes: NotesClient | undefined;
    protected _tags: TagsClient | undefined;
    protected _conversations: ConversationsClient | undefined;
    protected _customChannelEvents: CustomChannelEventsClient | undefined;
    protected _customObjectInstances: CustomObjectInstancesClient | undefined;
    protected _dataAttributes: DataAttributesClient | undefined;
    protected _events: EventsClient | undefined;
    protected _jobs: JobsClient | undefined;
    protected _messages: MessagesClient | undefined;
    protected _segments: SegmentsClient | undefined;
    protected _subscriptionTypes: SubscriptionTypesClient | undefined;
    protected _phoneCallRedirects: PhoneCallRedirectsClient | undefined;
    protected _calls: CallsClient | undefined;
    protected _teams: TeamsClient | undefined;
    protected _ticketStates: TicketStatesClient | undefined;
    protected _ticketTypes: TicketTypesClient | undefined;
    protected _tickets: TicketsClient | undefined;
    protected _visitors: VisitorsClient | undefined;
    protected _news: NewsClient | undefined;
    protected _unstable: UnstableClient | undefined;

    constructor(options: IntercomClient.Options = {}) {
        this._options = normalizeClientOptionsWithAuth(options);
    }

    public get admins(): AdminsClient {
        return (this._admins ??= new AdminsClient(this._options));
    }

    public get aiContent(): AiContentClient {
        return (this._aiContent ??= new AiContentClient(this._options));
    }

    public get articles(): ArticlesClient {
        return (this._articles ??= new ArticlesClient(this._options));
    }

    public get awayStatusReasons(): AwayStatusReasonsClient {
        return (this._awayStatusReasons ??= new AwayStatusReasonsClient(this._options));
    }

    public get export(): ExportClient {
        return (this._export ??= new ExportClient(this._options));
    }

    public get dataExport(): DataExportClient {
        return (this._dataExport ??= new DataExportClient(this._options));
    }

    public get helpCenters(): HelpCentersClient {
        return (this._helpCenters ??= new HelpCentersClient(this._options));
    }

    public get internalArticles(): InternalArticlesClient {
        return (this._internalArticles ??= new InternalArticlesClient(this._options));
    }

    public get ipAllowlist(): IpAllowlistClient {
        return (this._ipAllowlist ??= new IpAllowlistClient(this._options));
    }

    public get companies(): CompaniesClient {
        return (this._companies ??= new CompaniesClient(this._options));
    }

    public get contacts(): ContactsClient {
        return (this._contacts ??= new ContactsClient(this._options));
    }

    public get notes(): NotesClient {
        return (this._notes ??= new NotesClient(this._options));
    }

    public get tags(): TagsClient {
        return (this._tags ??= new TagsClient(this._options));
    }

    public get conversations(): ConversationsClient {
        return (this._conversations ??= new ConversationsClient(this._options));
    }

    public get customChannelEvents(): CustomChannelEventsClient {
        return (this._customChannelEvents ??= new CustomChannelEventsClient(this._options));
    }

    public get customObjectInstances(): CustomObjectInstancesClient {
        return (this._customObjectInstances ??= new CustomObjectInstancesClient(this._options));
    }

    public get dataAttributes(): DataAttributesClient {
        return (this._dataAttributes ??= new DataAttributesClient(this._options));
    }

    public get events(): EventsClient {
        return (this._events ??= new EventsClient(this._options));
    }

    public get jobs(): JobsClient {
        return (this._jobs ??= new JobsClient(this._options));
    }

    public get messages(): MessagesClient {
        return (this._messages ??= new MessagesClient(this._options));
    }

    public get segments(): SegmentsClient {
        return (this._segments ??= new SegmentsClient(this._options));
    }

    public get subscriptionTypes(): SubscriptionTypesClient {
        return (this._subscriptionTypes ??= new SubscriptionTypesClient(this._options));
    }

    public get phoneCallRedirects(): PhoneCallRedirectsClient {
        return (this._phoneCallRedirects ??= new PhoneCallRedirectsClient(this._options));
    }

    public get calls(): CallsClient {
        return (this._calls ??= new CallsClient(this._options));
    }

    public get teams(): TeamsClient {
        return (this._teams ??= new TeamsClient(this._options));
    }

    public get ticketStates(): TicketStatesClient {
        return (this._ticketStates ??= new TicketStatesClient(this._options));
    }

    public get ticketTypes(): TicketTypesClient {
        return (this._ticketTypes ??= new TicketTypesClient(this._options));
    }

    public get tickets(): TicketsClient {
        return (this._tickets ??= new TicketsClient(this._options));
    }

    public get visitors(): VisitorsClient {
        return (this._visitors ??= new VisitorsClient(this._options));
    }

    public get news(): NewsClient {
        return (this._news ??= new NewsClient(this._options));
    }

    public get unstable(): UnstableClient {
        return (this._unstable ??= new UnstableClient(this._options));
    }
}
