import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import App from './App.vue'
import router from './router'
import axios from 'axios'
import { ElMessage } from 'element-plus'

// 配置 Monaco Editor 环境
(window as any).MonacoEnvironment = {
  getWorker(_: any, label: string) {
    // 使用 Vite 特定的方式加载 web worker
    // 这种方式会确保 Vite 正确处理 web worker 文件
    // 添加 type: 'module' 选项，确保以模块模式加载 worker 文件
    if (label === 'json') {
      return new Worker(new URL('monaco-editor/esm/vs/language/json/json.worker.js', import.meta.url), { type: 'module' })
    } else if (label === 'css' || label === 'scss' || label === 'less') {
      return new Worker(new URL('monaco-editor/esm/vs/language/css/css.worker.js', import.meta.url), { type: 'module' })
    } else if (label === 'html' || label === 'handlebars' || label === 'razor') {
      return new Worker(new URL('monaco-editor/esm/vs/language/html/html.worker.js', import.meta.url), { type: 'module' })
    } else if (label === 'typescript' || label === 'javascript') {
      return new Worker(new URL('monaco-editor/esm/vs/language/typescript/ts.worker.js', import.meta.url), { type: 'module' })
    } else {
      return new Worker(new URL('monaco-editor/esm/vs/editor/editor.worker.js', import.meta.url), { type: 'module' })
    }
  }
}

// 配置axios
// 移除baseURL配置，使用Vite代理处理API路径映射
axios.defaults.headers.common['Content-Type'] = 'application/json'
axios.defaults.withCredentials = true

// 添加请求拦截器，用于添加认证token和调试日志
axios.interceptors.request.use(
  config => {
    // 调试日志
    console.log('发送请求:', config.method?.toUpperCase(), config.url)
    console.log('完整URL:', (axios.defaults.baseURL || '') + (config.url || ''))
    
    // 添加认证token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 添加响应拦截器，用于处理错误
axios.interceptors.response.use(
  response => {
    console.log('收到响应:', response.status, response.config.url)
    return response
  },
  error => {
    console.error('请求错误:', error)
    console.error('错误状态:', error.response?.status)
    console.error('错误数据:', error.response?.data)
    
    // 处理401错误，跳转到登录页
    if (error.response && error.response.status === 401) {
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      ElMessage.error('登录已过期，请重新登录')
      router.push('/login')
    } else if (error.response && error.response.status === 404) {
      // 404错误
      ElMessage.error('请求的接口不存在: ' + (error.config?.url || '未知路径'))
    } else if (error.response && error.response.data) {
      // 显示错误信息
      const errorMessage = error.response.data.detail || error.response.data.message || '请求失败'
      ElMessage.error(errorMessage)
    } else if (error.request) {
      // 请求已发出但没有收到响应
      ElMessage.error('网络错误，请检查网络连接')
    } else {
      // 其他错误
      ElMessage.error('请求失败，请稍后重试')
    }
    return Promise.reject(error)
  }
)

// 创建应用实例
const app = createApp(App)

// 注册插件
app.use(createPinia())
app.use(router)
app.use(ElementPlus)

// 挂载应用
app.mount('#app')
