import { createApp } from 'vue'
import Modal from '@/components/Modal.vue'

/**
 * 全局弹框服务
 * 提供统一的弹框调用接口，使用项目中已有的 Modal 组件
 */

// 创建一个全局的 Modal 实例容器
let modalInstance = null
let modalContainer = null

/**
 * 初始化 Modal 实例
 * 在应用启动时调用一次
 */
export const initModalService = () => {
  if (!modalContainer) {
    // 创建一个隐藏的 div 作为 Modal 的挂载点
    modalContainer = document.createElement('div')
    document.body.appendChild(modalContainer)
    
    // 创建 Modal 实例
    const app = createApp(Modal)
    modalInstance = app.mount(modalContainer)
  }
  
  return modalInstance
}

/**
 * 显示确认弹框
 * @param {string} message - 弹框消息
 * @param {string} title - 弹框标题
 * @param {Object} options - 弹框选项
 * @returns {Promise<boolean>} 用户确认返回 true，取消返回 false
 */
export const showConfirm = (message, title = '确认', options = {}) => {
  // 确保 Modal 实例已初始化
  if (!modalInstance) {
    initModalService()
  }
  
  // 显示弹框
  return modalInstance.show({
    title,
    message,
    showInput: false,
    showConfirm: true,
    showCancel: true,
    ...options
  })
}

/**
 * 显示提示弹框
 * @param {string} message - 弹框消息
 * @param {string} title - 弹框标题
 * @param {Object} options - 弹框选项
 * @returns {Promise<void>}
 */
export const showAlert = (message, title = '提示', options = {}) => {
  // 确保 Modal 实例已初始化
  if (!modalInstance) {
    initModalService()
  }
  
  // 显示弹框
  return modalInstance.show({
    title,
    message,
    showInput: false,
    showConfirm: true,
    showCancel: false,
    ...options
  })
}

/**
 * 显示输入弹框
 * @param {string} message - 弹框消息
 * @param {string} title - 弹框标题
 * @param {string} placeholder - 输入框占位符
 * @param {string} defaultValue - 输入框默认值
 * @param {Object} options - 弹框选项
 * @returns {Promise<string|null>} 用户输入的值，取消返回 null
 */
export const showPrompt = (message, title = '输入', placeholder = '请输入文字', defaultValue = '', options = {}) => {
  // 确保 Modal 实例已初始化
  if (!modalInstance) {
    initModalService()
  }
  
  // 显示弹框
  return modalInstance.show({
    title,
    message,
    showInput: true,
    showConfirm: true,
    showCancel: true,
    inputPlaceholder: placeholder,
    inputValue: defaultValue,
    ...options
  })
}

// 默认导出所有方法
export default {
  initModalService,
  showConfirm,
  showAlert,
  showPrompt
}