export type Platform = 'pc' | 'h5' | 'native'

export interface LoggerParam {
    /**
     * 事件id
     */
    eid?: string
    /**
     * 事件类型
     */
    event_type?: number
    /**
     * 打点参数
     */
    ext?: Record<string, any> | string
    /**
     * 触发用户idUrl
     */
    uid?: string
    /**
     * 设备id
     */
    did?: string
    /**
     * 来源url
     */
    refer_url?: string
    /**
     * 平台
     */
    platform?: Platform
    /**
     * 当前时间
     */
    time?: number
    /**
     * 当前页面url
     */
    url?: string

    /**
     * 启动时间，30分钟活跃
     */
    launch_time?: number
    noShowToast?: boolean
    localVersion?: boolean
    isReport?: boolean
}

export interface Config {
    /**
     * 接口地址, 打点上报的api
     */
    logUrl: string
    /**
     * 浏览曝光元素的类名，看到这个元素时，上报
     */
    exposeClassName?: string
    /**
     * 平台
     */
    platform?: Platform
    /**
     * 点击时上报的元素的属性，ex: <a expose-click>，点击带有expose-click的元素时，上报
     */
    exposeClickAttr?: string

    /**
     * 点击时发生跳转的元素的属性，ex: <a expose-click-blank>, 点击带有expose-click-blank的元素时，上报
     */
    exposeClickBlankAttrName?: string

    /**
     * 点击时发生跳转的元素的url的属性名，ex: <div href="xxx">，发生跳转时，上报url，取href
     */
    exposeClickBlankHrefAttrName?: string
    /**
     * 点击时曝光点击位 - 那些元素点击时需要曝光
     */
    clickEles?: string[]
}

declare global {
    /**
     * logger实例
     */
    interface LoggerInstance {
        /**
         * 事件类型
         */
        EVENT_TYPE: EventType
        /**
         * 事件id
         */
        EID: Eid
        /**
         * 打点接口
         */
        log: (params: Array<LoggerParam> | LoggerParam) => Promise<any>
        /**
         * 配置logger，打点api，需要上报的元素类名等，全局生效
         */
        setGlobalConfig: (config: Config) => void
        /**
         * 获取打点参数
         */
        getParams: (
            eid?: string,
            event_type?: number,
            ext?: Record<string, any>,
        ) => Partial<LoggerParam>
    }
    interface Window {
        logger: LoggerInstance
    }
    /**
     * 打点事件类型
     */
    interface EventType {
        /**
         * 点击跳转
         */
        CLICK_BLANK: 1
        /**
         * 普通点击
         */
        CLICK: 2
    }
    /**
     * 事件id
     */
    interface Eid {
        /**
         * 通用点击
         */
        COMMON: '0x00000000'
        /**
         * 点击
         */
        COMMON_CLICK: '10000001'
        /**
         * 页面跳转
         */
        BLANK: '0'
    }
}
