import core from './core'
import config from '../../config/posthog.config'

/**
 * PostHog Analytics 单例
 *
 * 使用方式：
 * import analytics from '@/utils/posthog'
 *
 * // 在App.vue的onLaunch中初始化
 * analytics.init()
 *
 * // 追踪事件
 * analytics.track('button_click', { button_id: 'submit' })
 *
 * // 页面浏览
 * analytics.trackPageView('/pages/index/index', '首页')
 *
 * // 用户登录
 * analytics.identify('user_openid', { nickname: '张三' })
 *
 * // 用户登出
 * analytics.reset()
 */
class Analytics {
  constructor() {
    this._core = core
    this._initialized = false
  }

  /**
   * 初始化（使用默认配置）
   */
  init(customConfig = {}) {
    if (this._initialized) return this

    const finalConfig = {
      ...config,
      ...customConfig,
    }

    this._core.init(finalConfig)
    this._initialized = true

    return this
  }

  /**
   * 开始会话
   */
  startSession() {
    return this._core.startSession()
  }

  /**
   * 结束会话
   */
  endSession() {
    return this._core.endSession()
  }

  /**
   * 用户登录标识
   */
  identify(userId, userProperties = {}) {
    return this._core.identify(userId, userProperties)
  }

  /**
   * 用户登出重置
   */
  reset() {
    return this._core.reset()
  }

  /**
   * 追踪事件
   */
  track(eventName, properties = {}) {
    return this._core.track(eventName, properties)
  }

  /**
   * 追踪页面浏览
   */
  trackPageView(pagePath, pageTitle = '', properties = {}) {
    return this._core.trackPageView(pagePath, pageTitle, properties)
  }

  /**
   * 追踪页面离开
   */
  trackPageLeave(pagePath, duration = 0, properties = {}) {
    return this._core.trackPageLeave(pagePath, duration, properties)
  }

  /**
   * 设置全局公共属性
   */
  setSuperProperties(properties) {
    return this._core.setSuperProperties(properties)
  }

  /**
   * 清除全局公共属性
   */
  clearSuperProperties() {
    return this._core.clearSuperProperties()
  }

  /**
   * 设置用户属性
   */
  setUserProperties(properties) {
    return this._core.setUserProperties(properties)
  }

  /**
   * 设置仅首次生效的用户属性
   */
  setUserPropertiesOnce(properties) {
    return this._core.setUserPropertiesOnce(properties)
  }

  /**
   * 更新活跃时间
   */
  touch() {
    return this._core.touch()
  }

  /**
   * 强制刷新事件队列
   */
  flush() {
    return this._core.flush()
  }

  /**
   * 获取当前用户ID
   */
  getDistinctId() {
    return this._core.getDistinctId()
  }

  /**
   * 获取会话ID
   */
  getSessionId() {
    return this._core.getSessionId()
  }

  /**
   * 销毁SDK
   */
  destroy() {
    return this._core.destroy()
  }
}

// 导出单例
export default new Analytics()