/**************************************************************************
 * IMPORTS
 ***************************************************************************/
import BaseResource from "./BaseResource";
import { WebsiteFilter } from "./WebsiteBase";
/**************************************************************************
 * TYPES
 ***************************************************************************/
export type WebsiteCampaignExcerpt = {
    campaign_id?: string;
    type?: string;
    format?: string;
    name?: string;
    subject?: string;
    tag?: string;
    ready?: boolean;
    dispatched?: boolean;
    running?: boolean;
    progress?: number;
    targets?: number;
    reached?: number;
    created_at: number;
    updated_at: number;
    dispatched_at?: number;
};
export type WebsiteCampaignTemplateExcerpt = {
    template_id?: string;
    type?: string;
    name?: string;
    format?: string;
    created_at?: number;
    updated_at?: number;
};
export type WebsiteCampaignTemplateNew = {
    template_id?: string;
};
export interface WebsiteCampaignTemplateItem extends WebsiteCampaignTemplateExcerpt {
    content?: string;
}
export interface WebsiteCampaignItem extends WebsiteCampaignExcerpt {
    sender?: WebsiteCampaignItemSender;
    recipients?: WebsiteCampaignItemRecipients;
    flow?: WebsiteCampaignItemFlow;
    message?: string;
    options?: WebsiteCampaignItemOptions;
    statistics?: WebsiteCampaignItemStatistics;
}
export type WebsiteCampaignItemSender = {
    user_id?: string;
};
export type WebsiteCampaignItemRecipients = {
    type?: string;
    segments?: string[];
    people?: string[];
    filter?: WebsiteFilter[];
};
export type WebsiteCampaignItemFlow = {
    launch_event?: string;
    assert_filter?: WebsiteFilter[];
    assert_delay?: number;
    deliver_once?: boolean;
    deliver_delay?: number;
};
export type WebsiteCampaignItemOptions = {
    deliver_to_chatbox?: boolean;
    deliver_to_email?: boolean;
    sender_name_website?: boolean;
    sender_email_reply?: boolean;
    tracking?: boolean;
};
export type WebsiteCampaignItemStatistics = {
    opened?: number;
    clicked?: number;
    unsubscribed?: number;
};
export type WebsiteCampaignRecipient = {
    people_id?: string;
    email?: string;
    person?: WebsiteCampaignRecipientPerson;
    subscribed?: boolean;
};
export type WebsiteCampaignRecipientPerson = {
    nickname?: string;
    avatar?: string;
};
export type WebsiteCampaignStatistic = {
    type?: string;
    profile?: WebsiteCampaignStatisticProfile;
    data?: Record<string, unknown>;
    created_at?: number;
    updated_at?: number;
};
export type WebsiteCampaignStatisticProfile = {
    people_id?: string;
    email?: string;
    person?: WebsiteCampaignStatisticProfilePerson;
};
export type WebsiteCampaignStatisticProfilePerson = {
    nickname?: string;
    avatar?: string;
    geolocation?: WebsiteCampaignStatisticProfilePersonGeolocation;
};
export type WebsiteCampaignStatisticProfilePersonGeolocation = {
    country?: string;
    region?: string;
    city?: string;
    coordinates?: WebsiteCampaignStatisticProfilePersonGeolocationCoordinates;
};
export type WebsiteCampaignStatisticProfilePersonGeolocationCoordinates = {
    latitude?: number;
    longitude?: number;
};
/**************************************************************************
 * CLASSES
 ***************************************************************************/
/**
 * Crisp WebsiteCampaign Resource
 */
declare class WebsiteCampaign extends BaseResource {
    /**
     * List Campaigns
     */
    listCampaigns(websiteID: string, pageNumber?: number): Promise<WebsiteCampaignExcerpt[]>;
    /**
     * List Campaign Tags
     */
    listCampaignTags(websiteID: string): Promise<string[]>;
    /**
     * List Campaign Templates
     */
    listCampaignTemplates(websiteID: string, pageNumber?: number): Promise<WebsiteCampaignTemplateExcerpt[]>;
    /**
     * Create A New Campaign Template
     */
    createNewCampaignTemplate(websiteID: string, templateFormat: string, templateName: string): Promise<WebsiteCampaignTemplateNew>;
    /**
     * Check If Campaign Template Exists
     */
    checkCampaignTemplateExists(websiteID: string, templateID: string): Promise<any>;
    /**
     * Get A Campaign Template
     */
    getCampaignTemplate(websiteID: string, templateID: string): Promise<WebsiteCampaignTemplateItem>;
    /**
     * Save A Campaign Template
     */
    saveCampaignTemplate(websiteID: string, templateID: string, template: WebsiteCampaignTemplateItem): Promise<any>;
    /**
     * Update A Campaign Template
     */
    updateCampaignTemplate(websiteID: string, templateID: string, template: WebsiteCampaignTemplateItem): Promise<any>;
    /**
     * Remove A Campaign Template
     */
    removeCampaignTemplate(websiteID: string, templateID: string): Promise<any>;
    /**
     * Create A New Campaign
     */
    createNewCampaign(websiteID: string, campaignType: string, campaignName: string): Promise<any>;
    /**
     * Check If Campaign Exists
     */
    checkCampaignExists(websiteID: string, campaignID: string): Promise<any>;
    /**
     * Get A Campaign
     */
    getCampaign(websiteID: string, campaignID: string): Promise<WebsiteCampaignItem>;
    /**
     * Save A Campaign
     */
    saveCampaign(websiteID: string, campaignID: string, campaign: WebsiteCampaignItem): Promise<any>;
    /**
     * Update A Campaign
     */
    updateCampaign(websiteID: string, campaignID: string, campaign: WebsiteCampaignItem): Promise<any>;
    /**
     * Remove A Campaign
     */
    removeCampaign(websiteID: string, campaignID: string): Promise<any>;
    /**
     * Dispatch A Campaign
     * @return {Promise}
     */
    dispatchCampaign(websiteID: string, campaignID: string): Promise<any>;
    /**
     * Resume A Campaign
     */
    resumeCampaign(websiteID: string, campaignID: string): Promise<any>;
    /**
     * Pause A Campaign
     */
    pauseCampaign(websiteID: string, campaignID: string): Promise<any>;
    /**
     * Test A Campaign
     */
    testCampaign(websiteID: string, campaignID: string): Promise<any>;
    /**
     * List Campaign Recipients
     */
    listCampaignRecipients(websiteID: string, campaignID: string, pageNumber?: number): Promise<WebsiteCampaignRecipient[]>;
    /**
     * List Campaign Statistics
     */
    listCampaignStatistics(websiteID: string, campaignID: string, action: string, pageNumber?: number): Promise<WebsiteCampaignStatistic[]>;
}
/**************************************************************************
 * EXPORTS
 ***************************************************************************/
export default WebsiteCampaign;
