import Vue from 'vue'
import MobileToast from '@/components/MobileToast/index.vue'

// 创建Toast构造器
const ToastConstructor = Vue.extend(MobileToast)

let toastInstance = null

/**
 * 创建Toast实例
 * @returns {Object} Toast实例
 */
function createToastInstance() {
  const instance = new ToastConstructor()
  instance.$mount()
  document.body.appendChild(instance.$el)
  return instance
}

/**
 * 获取Toast实例（单例模式）
 * @returns {Object} Toast实例
 */
function getToastInstance() {
  if (!toastInstance) {
    toastInstance = createToastInstance()
  }
  return toastInstance
}

/**
 * 显示Toast提示
 * @param {string|Object} options 提示内容或配置对象
 * @param {string} type 提示类型
 * @param {number} duration 显示时长
 */
function showToast(options, type = 'info', duration = 3000) {
  const instance = getToastInstance()
  
  if (typeof options === 'string') {
    instance.show({
      message: options,
      type,
      duration
    })
  } else {
    instance.show({
      type,
      duration,
      ...options
    })
  }
}

/**
 * Toast工具类
 * 提供移动端友好的提示功能
 */
const Toast = {
  /**
   * 显示信息提示
   * @param {string} message 提示内容
   * @param {number} duration 显示时长
   */
  info(message, duration = 3000) {
    showToast(message, 'info', duration)
  },

  /**
   * 显示成功提示
   * @param {string} message 提示内容
   * @param {number} duration 显示时长
   */
  success(message, duration = 3000) {
    showToast(message, 'success', duration)
  },

  /**
   * 显示错误提示
   * @param {string} message 提示内容
   * @param {number} duration 显示时长
   */
  error(message, duration = 3000) {
    showToast(message, 'error', duration)
  },

  /**
   * 显示警告提示
   * @param {string} message 提示内容
   * @param {number} duration 显示时长
   */
  warning(message, duration = 3000) {
    showToast(message, 'warning', duration)
  },

  /**
   * 隐藏Toast
   */
  hide() {
    if (toastInstance) {
      toastInstance.hide()
    }
  },

  /**
   * 销毁Toast实例
   */
  destroy() {
    if (toastInstance) {
      toastInstance.hide()
      document.body.removeChild(toastInstance.$el)
      toastInstance.$destroy()
      toastInstance = null
    }
  }
}

// 安装Vue插件
Toast.install = function(Vue) {
  Vue.prototype.$toast = Toast
}

export default Toast 