import { type IInboxMessage } from '../../models/InboxMessages.types';
import { type WebPopup } from '../../widgets/WebPopups/types';
import { type MultiRegisterDeviceRequest } from '../Api/Api.types';
type TMethodCheckDevice = 'checkDevice';
type TMethodGetConfig = 'getConfig';
type TMethodApplicationOpen = 'applicationOpen';
type TMethodRegisterDevice = 'registerDevice';
type TMethodUnregisterDevice = 'unregisterDevice';
type TMethodDeleteDevice = 'deleteDevice';
type TMethodMessageDeliveryEvent = 'messageDeliveryEvent';
type TMethodPushStat = 'pushStat';
type TMethodSetTags = 'setTags';
type TMethodGetTags = 'getTags';
type TMethodRegisterUser = 'registerUser';
type TMethodRegisterEmail = 'registerEmail';
type TMethodRegisterEmailUser = 'registerEmailUser';
type TMethodRegisterSmsNumber = 'registerSmsNumber';
type TMethodRegisterWhatsappNumber = 'registerWhatsappNumber';
type TMethodGetPopupForms = 'getPopupForms';
type TMethodGetPopupFormContent = 'getPopupFormContent';
type TMethodRecordPopupFormEvent = 'recordPopupFormEvent';
type TMethodSetEmailTags = 'setEmailTags';
type TMethodPostEvent = 'postEvent';
type TMethodGetInboxMessages = 'getInboxMessages';
type TMethodInboxStatus = 'inboxStatus';
type TMethodPageVisit = 'pageVisit';
type TMethodMultiRegisterDevice = 'multiRegisterDevice';
export interface IRequest {
    application: string;
    hwid: string;
    userId: string;
    device_type: number;
    device_model?: string;
    timezone?: number;
    language?: string;
    v?: string;
}
export interface IRequestEmail extends Omit<IRequest, 'hwid' | 'device_type'> {
    email: string;
}
export interface IRequestSmsNumber extends Omit<IRequest, 'hwid' | 'device_type'> {
    number: string;
}
export interface IRequestWhatsappNumber extends Omit<IRequest, 'hwid' | 'device_type'> {
    number: string;
}
interface IRequestGetConfig extends IRequest {
    features: string[];
}
interface IRequestGetPopupFormContent extends IRequest {
    code: string;
}
interface IRequestRecordPopupFormEvent extends IRequest {
    code: string;
    event: 1 | 2;
}
interface IRequestRegisterDevice extends IRequest {
    push_token?: string;
    public_key?: string;
    auth_token?: string;
}
interface IRequestRegisterUser extends IRequest {
    ts_offset: number;
}
interface IRequestRegisterEmail extends IRequestEmail {
    tags?: {
        [key: string]: any;
    };
    ts_offset: number;
}
interface IRequestRegisterEmailUser extends IRequestEmail {
    ts_offset: number;
}
interface IRequestRegisterSmsNumber extends IRequestSmsNumber {
    ts_offset: number;
}
interface IRequestRegisterWhatsappNumber extends IRequestWhatsappNumber {
    ts_offset: number;
}
interface IRequestSetEmailTags extends IRequestEmail {
    tags: {
        [key: string]: any;
    };
}
interface IRequestPostEvent extends IRequest {
    event: string;
    attributes?: {
        [key: string]: any;
    };
    timestampUTC?: number;
    timestampCurrent?: number;
}
interface IRequestMessageDeliveryEvent extends IRequest {
    hash: string;
    metaData: {
        [key: string]: any;
    };
}
interface IRequestPushStat extends IRequest {
    hash: string;
    metaData: {
        [key: string]: any;
    };
}
interface IRequestSetTags extends IRequest {
    tags: {
        [key: string]: any;
    };
}
interface IRequestGetInboxMessages extends IRequest {
    userId: string;
    last_code: string;
    count?: number;
    last_request_time: number;
}
interface IRequestInboxStatus extends IRequest {
    userId: string;
    inbox_code: string;
    time: number;
    status: number;
    hash?: string;
    device_type: number;
}
interface IRequestPageVisit extends IRequest {
    title: string;
    url_path: string;
    url: string;
}
type IResponse = void;
interface IResponseCheckDevice {
    exist: boolean;
    push_token_exist: boolean;
}
interface IResponseGetConfig {
    features: {
        page_visit?: {
            entrypoint: string;
            enabled: boolean;
        };
        vapid_key?: string;
        web_in_apps?: {
            enabled: boolean;
        };
        events?: string[];
        subscription_prompt?: {
            useCase: 'not-set' | 'default' | 'not-used';
        };
    };
}
interface IResponseGetPopupForms {
    popup_forms: Array<WebPopup>;
}
interface IResponseGetPopupFormContent {
    code: string;
    json: string;
    html: string | null;
}
interface IResponseGetTags {
    result: {
        [key: string]: any;
    };
}
interface IResponsePostEvent {
    code?: string;
}
interface IResponseGetInboxMessages {
    messages: Array<IInboxMessage>;
    next: string;
    deleted: Array<string>;
    new_inbox: number;
}
export type TMethod = TMethodCheckDevice | TMethodGetConfig | TMethodApplicationOpen | TMethodRegisterDevice | TMethodUnregisterDevice | TMethodDeleteDevice | TMethodMessageDeliveryEvent | TMethodPushStat | TMethodSetTags | TMethodGetTags | TMethodRegisterUser | TMethodRegisterEmail | TMethodRegisterEmailUser | TMethodRegisterSmsNumber | TMethodRegisterWhatsappNumber | TMethodGetPopupForms | TMethodGetPopupFormContent | TMethodRecordPopupFormEvent | TMethodSetEmailTags | TMethodPostEvent | TMethodGetInboxMessages | TMethodInboxStatus | TMethodPageVisit | TMethodMultiRegisterDevice;
export interface IMapRequest {
    checkDevice: IRequest;
    getConfig: IRequestGetConfig;
    applicationOpen: IRequest;
    registerDevice: IRequestRegisterDevice;
    unregisterDevice: IRequest;
    deleteDevice: IRequest;
    messageDeliveryEvent: IRequestMessageDeliveryEvent;
    pushStat: IRequestPushStat;
    setTags: IRequestSetTags;
    getTags: IRequest;
    registerUser: IRequestRegisterUser;
    registerEmail: IRequestRegisterEmail;
    registerEmailUser: IRequestRegisterEmailUser;
    registerSmsNumber: IRequestRegisterSmsNumber;
    registerWhatsappNumber: IRequestRegisterWhatsappNumber;
    getPopupForms: IRequest;
    getPopupFormContent: IRequestGetPopupFormContent;
    recordPopupFormEvent: IRequestRecordPopupFormEvent;
    setEmailTags: IRequestSetEmailTags;
    postEvent: IRequestPostEvent;
    getInboxMessages: IRequestGetInboxMessages;
    inboxStatus: IRequestInboxStatus;
    pageVisit: IRequestPageVisit;
    multiRegisterDevice: MultiRegisterDeviceRequest;
}
export interface IMapResponse {
    checkDevice: IResponseCheckDevice;
    getConfig: IResponseGetConfig;
    applicationOpen: IRequest;
    registerDevice: IResponse;
    unregisterDevice: IResponse;
    deleteDevice: IResponse;
    messageDeliveryEvent: IResponse;
    pushStat: IResponse;
    setTags: IResponse;
    getTags: IResponseGetTags;
    registerUser: IResponse;
    registerEmail: IResponse;
    registerEmailUser: IResponse;
    registerSmsNumber: IResponse;
    registerWhatsappNumber: IResponse;
    getPopupForms: IResponseGetPopupForms;
    getPopupFormContent: IResponseGetPopupFormContent;
    recordPopupFormEvent: IResponse;
    setEmailTags: IResponse;
    postEvent: IResponsePostEvent;
    getInboxMessages: IResponseGetInboxMessages;
    inboxStatus: IResponse;
    pageVisit: IResponse;
    multiRegisterDevice: IResponse;
}
export {};
