import { type IInboxMessage } from '../../models/InboxMessages.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 TMethodSetEmailTags = 'setEmailTags';
type TMethodPostEvent = 'postEvent';
type TMethodGetInboxMessages = 'getInboxMessages';
type TMethodInboxStatus = 'inboxStatus';
type TMethodPageVisit = 'pageVisit';
type TMethodSetPurchase = 'setPurchase';
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;
}
interface IRequestGetConfig extends IRequest {
    features: string[];
}
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 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;
}
interface IRequestSetPurchase extends IRequest {
    transactionDate: string;
    quantity: number;
    currency: string;
    productIdentifier: string;
    price: number;
}
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 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 | TMethodSetEmailTags | TMethodPostEvent | TMethodGetInboxMessages | TMethodInboxStatus | TMethodPageVisit | TMethodSetPurchase;
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;
    setEmailTags: IRequestSetEmailTags;
    postEvent: IRequestPostEvent;
    getInboxMessages: IRequestGetInboxMessages;
    inboxStatus: IRequestInboxStatus;
    pageVisit: IRequestPageVisit;
    setPurchase: IRequestSetPurchase;
}
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;
    setEmailTags: IResponse;
    postEvent: IResponsePostEvent;
    getInboxMessages: IResponseGetInboxMessages;
    inboxStatus: IResponse;
    pageVisit: IResponse;
    setPurchase: IResponse;
}
export {};
