package com.all.pdfreader.pdf.reader.util

import android.os.Bundle
import com.all.pdfreader.pdf.reader.BuildConfig
import com.google.firebase.Firebase
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.analytics

object AnalyticsUtils {

    private var firebaseAnalytics: FirebaseAnalytics? = null

    fun init() {
        if (firebaseAnalytics == null) {
            firebaseAnalytics = Firebase.analytics
            firebaseAnalytics?.setUserProperty("channel", BuildConfig.CHANNEL)
        }
    }

    fun logEvent(eventName: String, params: Map<String, Any?> = emptyMap()) {
        val bundle = Bundle()
        params.forEach { (key, value) ->
            when (value) {
                is String -> bundle.putString(key, value)
                is Int -> bundle.putInt(key, value)
                is Long -> bundle.putLong(key, value)
                is Double -> bundle.putDouble(key, value)
                is Boolean -> bundle.putBoolean(key, value)
                null -> {} // 忽略空值
                else -> bundle.putString(key, value.toString()) // fallback
            }
        }
        firebaseAnalytics?.logEvent(eventName, bundle)
    }

    /**
     * 使用示例：
     *  1.单独打点事件，无参数等方式
     *  AnalyticsUtils.logEvent(AnalyticsUtils.Event.APP_LAUNCH_CK)
     *  2.需要传入params与对应值的方式
     *  AnalyticsUtils.logEvent(AnalyticsUtils.Event.SELECT_ITEM) {
     *     put(AnalyticsUtils.Param.ITEM_ID, id)
     *     put("item_name", name)
     *  }
     */
    fun logEvent(eventName: String, block: MutableMap<String, Any?>.() -> Unit) {
        val params = mutableMapOf<String, Any?>().apply(block)
        logEvent(eventName, params)
    }

    /** event 常量 */
    object Event {
        const val APP_LAUNCH_CK = "app_launch_ck" // 应用启动（app_launch_ck）
        const val SPLASH_VISIBLE = "splash_visible" // 启动页（splash_visible）
        const val HOME_SHOW = "home_show" // 成功进入到首页（home_show）
        const val SELECT_CK = "select_ck" // 点击选择文件按钮（select_ck）
        const val DELETE_CK = "delete_ck" // 点击删除按钮（delete_ck）
        const val DELETE_SUCCESS = "delete_success" // 删除成功（delete_success）
        const val MERGE_SHOW = "merge_show" // 进入到合并页面（merge_show）
        const val MERGE_BACK_CONFIRM = "merge_back_confirm" // 确认返回（merge_back_confirm）
        const val MERGE_SUCCESS = "merge_success" // 合并成功（merge_success）
        const val SPLIT_SHOW = "split_show" // 进入到拆分页面（split_show）
        const val SPLIT_LEAVE_CONFIRM = "split_leave_confirm" // 确认放弃拆分（split_leave_confirm）
        const val SPLIT_SUCCESS = "split_success" // 拆分成功（split_success）
        const val SEARCH_SHOW = "search_show" // 点击搜索（search_ck）
        const val SEARCH_SUCCESS = "search_success" // 提交搜索请求（search_success）
        const val SORT_SHOW = "sort_show" // 点击排序按钮（sort_ck）
        const val PDF_SHOW = "pdf_show" // 进入PDF内容页（pdf_show）
        const val VIEW_MODE_CK = "view_mode_ck" // 点击浏览模式按钮（view_mode_ck）
        const val VIEWPAGE_MODE_CK = "viewpage_mode_ck" // 点击页面浏览模式按钮（viewpage_mode_ck）
        const val VIEWPAGE_COLOR_CK = "viewpage_color_ck" // 点击页面颜色按钮（viewpage_color_ck）
        const val BOOKMARK_TK_SHOW = "bookmark_tk_show" // 增加书签弹框出现（bookmark_tk_show）
        const val BOOKMARK_ADD_SUCCESS = "bookmark_add_success" // 书签添加成功（bookmark_add_success）
        const val EYE_PROTECT_CK = "eye_protect_ck" // 点击护眼模式（eye_protect_ck）
        const val DETAILS_EXPAND_CK = "details_expand_ck" // 点击详情信息介绍页（details_expand_ck）
        const val RENAME_TK_SHOW = "rename_tk_show" // 重命名弹框出现（rename_tk_show）
        const val RENAME_SUCCESS = "rename_success" // 重命名成功（rename_success）
        const val FAVORITE_ADD = "favorite_add" // 添加喜欢（favorite_add）
        const val FAVORITE_REMOVE = "favorite_remove" // 取消喜欢（favorite_remove）
        const val PAGE_JUMP_CK = "page_jump_ck" // 点击跳转页数按钮（page_jump_ck）
        const val PAGE_JUMP_SUCCESS = "page_jump_success" // 跳转成功（page_jump_success）
        const val FILE_COPY_CK = "file_copy_ck" // 点击复制文件（file_copy_ck）
        const val FILE_COPY_SUCCESS = "file_copy_success" // 复制文件成功（file_copy_success）
        const val PDFTO_TU_SHOW = "pdfto_tu_show" // PDF转图片页面（pdfto_tu_show）
        const val PDFTO_TU_SUCCESS = "pdfto_tu_success" // 转换成功（pdfto_tu_success）
        const val PDFTO_CTU_SHOW = "pdfto_ctu_show" // PDF转长图页面（pdfto_ctu_show）
        const val PDFTO_CTU_SUCCESS = "pdfto_ctu_success" // 转化成功（pdfto_ctu_success）
        const val LOCK_TK_SHOW = "lock_tk_show" // 设置密码的弹框出现（lock_tk_show）
        const val LOCK_SUCCESS = "lock_success" // 文件锁定成功（lock_success）
        const val REMOVE_CK = "remove_ck" // 点击移除按钮（remove_ck）
        const val REMOVE_SUCCESS = "remove_success" // 移除成功（remove_success）
        const val TUTO_PDF_SHOW = "tuto_pdf_show" // 图片转PDF页面（tuto_pdf_show）
        const val TUTO_PDF_SUCCESS = "tuto_pdf_success" // 转换成功（tuto_pdf_success）
        const val UNLOCK_TK_SHOW = "unlock_tk_show" // 解锁文件弹框出现（unlock_tk_show）
        const val UNLOCK_SUCCESS = "unlock_success" // 解锁成功（unlock_success）
        const val KEEP_SCREEN_OPEN = "keep_screen_open" // 点击打开（keep_screen_open）
        const val KEEP_SCREEN_CLOSE = "keep_screen_close" // 点击关闭（keep_screen_close）
    }

    /** param 常量 */
    object Param {

    }
}
