/**
 * axios请求封装（双实例）
 */
import axios from 'axios'
import router from '@/router'
import { getToken } from '@/stores/storage'
import { ElMessage } from 'element-plus'

// —— 改为从 .env 文件读取 —— 
const BASE_LOCAL = process.env.VUE_APP_BASE_LOCAL
const BASE_REMOTE = process.env.VUE_APP_BASE_REMOTE
const BASE_SPECIAL = process.env.VUE_APP_BASE_SPECIAL

let isStart = true

// 公共：给某个 axios 实例挂上拦截器
function attachInterceptors(instance) {

    //请求拦截器
    instance.interceptors.request.use((config) => {
        // 登录/换租户接口可能不需要 token，根据你的需求放行
        const urlLast = sliceUrl(config.url || '')
        if ((urlLast === 'prologue' || urlLast === 'comment' || urlLast === 'aiChat-logout' || urlLast === 'updates' || urlLast === 'health')) {
            config.headers['vvtoken'] = getToken()
        }
        // 超时 & 通用头
        config.timeout = 180000
        if (!config.headers) config.headers = {}
        // 大多数 POST 走 x-www-form-urlencoded（保持你原来的行为）
        // console.log(config.method)
        // if (config.method == 'post') {
        //     config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
        // }
        // config.headers['Content-type'] = 'application/json'
        return config
    }, (error) => Promise.reject(error))

    // 响应拦截器
    instance.interceptors.response.use(
        (response) => {
            const data = response.data       // 请求的 返回数据
            const url = response.config.url   // 请求的 url
            if (data?.code === 0 || data?.code === 200) {
                // 成功：返回业务数据（没有就回传原 data）
                return (data?.data !== undefined) ? data.data : data
            } else if (data?.code === 40400) {
                router.push('/')
            }

            // 业务失败：提示 + reject
            const msg = `${data?.code ?? ''} ${data?.message ?? '请求失败'}`
            ElMessage.error(msg)

            const err = new Error(msg)
            // @ts-ignore
            err.code = data?.code
            // @ts-ignore
            err.response = response
            return Promise.reject(err)
        },
        (error) => {
            // 网络/超时等：提示 + reject
            if (error.code === 'ERR_NETWORK') {
                // 你原来的 isStart 逻辑如果要保留，只控制是否弹 toast；但**不要 return**
                if (!isStart) {
                    if (url === 'deviceList') {

                    } else {
                        ElMessage.error('网络请求失败')
                    }

                }
                isStart = false
            } else if (error.code === 'ECONNABORTED') {
                ElMessage.error('请求超时')
            }
            return Promise.reject(error)   // 关键：一定要 reject
        }
    )
}

// 创建两个独立的实例
const remoteAxios = axios.create({ baseURL: BASE_REMOTE })
const localAxios = axios.create({ baseURL: BASE_LOCAL })
const specialAxios = axios.create({ baseURL: BASE_SPECIAL })

attachInterceptors(remoteAxios)
attachInterceptors(localAxios)
attachInterceptors(specialAxios)
// —— 导出两套 GET/POST ——
// 远端（api.tkpage.yolozs.com）
export function getRemote({ url, params }) {
    return remoteAxios.get(url, { params })
}
export function postRemote({ url, data }) {
    return remoteAxios.post(url, data)
}
export async function downFileRemote(urlstr, data) {
    const resp = await remoteAxios.post(urlstr, data, { responseType: 'blob' })
    triggerDownload(resp)
}

// 本地（192.168.1.218:5000）
export function getLocal({ url, params }) {
    return localAxios.get(url, { params })
}
export function postLocal({ url, data }) {
    return localAxios.post(url, data)
}
export async function downFileLocal(urlstr, data) {
    const resp = await localAxios.post(urlstr, data, { responseType: 'blob' })
    triggerDownload(resp)
}


// ai ai翻译等功能的 GET/POST
export function getSpecial({ url, params }) {
    return specialAxios.get(url, { params })
}
export function postSpecial({ url, data, headers } = {}) {
    return specialAxios.post(url, data, { headers })
}

// —— 工具函数保留 —— 
function triggerDownload(response) {
    const contentDisposition = response.headers['content-disposition']
    let fileName = 'download'
    if (contentDisposition) {
        const m = contentDisposition.match(/filename="(.+)"/)
        if (m && m[1]) fileName = m[1]
    }
    const blob = new Blob([response.data], { type: response.headers['content-type'] })
    const url = window.URL.createObjectURL(blob)
    const a = document.createElement('a')
    a.href = url
    a.download = fileName
    a.click()
    window.URL.revokeObjectURL(url)
}

function sliceUrl(url) {
    const lastSlash = url.lastIndexOf('/')
    const questionMark = url.indexOf('?')
    if (questionMark === -1) return url.slice(lastSlash + 1)
    return url.slice(lastSlash + 1, questionMark)
}

// export default remoteAxios // 如有需要，默认导出一个实例（可选）
