import { ElMessage } from 'element-plus'

export function useHelpDocs() {
  const getApiBaseUrl = () => {
    // 1. 优先尝试使用环境变量
    let baseUrl = import.meta.env.VITE_API_BASE_URL
    
    // 2. 如果没有环境变量或为相对路径，基于当前 window.location 构建
    if (!baseUrl) {
      // 假设后端 API 挂载在 /api/v1 下 (常见 Nginx 代理或 Docker 配置)
      baseUrl = window.location.origin + '/api/v1'
    } else if (baseUrl.startsWith('/')) {
      baseUrl = window.location.origin + baseUrl
    }

    // 3. 特殊处理: 如果是 localhost 但当前通过 IP 访问，尝试自动替换 hostname
    // 这样开发者在局域网测试时，下载的文档会显示局域网 IP
    if (baseUrl.includes('localhost') && window.location.hostname !== 'localhost' && window.location.hostname !== '127.0.0.1') {
        baseUrl = baseUrl.replace('localhost', window.location.hostname)
    }

    // 去除末尾斜杠，保证拼接一致性
    if (baseUrl.endsWith('/')) {
      baseUrl = baseUrl.slice(0, -1)
    }
    
    return baseUrl
  }

  const openSwagger = () => {
    const baseUrl = getApiBaseUrl()
    // 后端 main.py 配置: docs_url=f"{settings.API_V1_STR}/docs"
    // API_V1_STR 默认为 /api/v1
    // 所以 Swagger 地址为 .../api/v1/docs
    const swaggerUrl = `${baseUrl}/docs`
    window.open(swaggerUrl, '_blank')
  }

  const downloadDoc = async (filePath: string, fileName: string) => {
    try {
      const response = await fetch(filePath)
      if (!response.ok) throw new Error('Network response was not ok')
      
      let text = await response.text()

      const baseUrl = getApiBaseUrl()

      // 执行替换
      // 替换文档中的 {{API_BASE_URL}} 占位符
      text = text.replace(/{{API_BASE_URL}}/g, baseUrl)
      
      // 兼容处理：替换可能遗漏的 http://localhost:8000/api/v1
      text = text.replace(/http:\/\/localhost:8000\/api\/v1/g, baseUrl)

      // 创建并下载 Blob
      const blob = new Blob([text], { type: 'text/markdown' })
      const url = window.URL.createObjectURL(blob)
      
      const link = document.createElement('a')
      link.href = url
      link.download = fileName
      document.body.appendChild(link)
      link.click()
      
      // 清理
      document.body.removeChild(link)
      window.URL.revokeObjectURL(url)
      
      ElMessage.success('文档下载成功，已更新 API 地址')
    } catch (error) {
      console.error('Download failed:', error)
      ElMessage.error('文档下载失败，请检查网络或文件路径')
    }
  }

  return {
    getApiBaseUrl,
    openSwagger,
    downloadDoc
  }
}
