/**
 * FIXD: 固定说明，此文件内不允许使用 import.env 之类的环境变量，否则会导致地图模块异常
 */

const PROXY_LIST = [
    // eg: 开发环境
    // ['http://192.168.1.100:18100', `http://proxy.yiring.com:41180`],
    // eg: 测试环境
    // ['http://10.111.117.15:18100', `http://proxy.yiring.com:42180`],
    // eg: 生产环境
    // ['http://192.168.0.100:18100', `https://oss.app.yiring.com`],
]

/**
 * 将内部地址（内网）转换成代理/预览地址（公网）
 * @param url 内网地址
 */
export const getExtranetUrl = (url: string): string => {
    let uri = url

    PROXY_LIST.forEach((proxy) => {
        uri = uri.replace(new RegExp(proxy[0], 'gi'), proxy[1])
    })

    return uri
}

/**
 * 将代理/预览地址（公网）转换成内部地址（内网）
 * eg: 主要用于解决内网文件上传后预览，但是实际上传存储时还是内网地址的问题
 * @param url 代理/公网地址
 */
export const getIntranetUrl = (url: string): string => {
    let uri = url

    PROXY_LIST.forEach((proxy) => {
        uri = uri.replace(new RegExp(proxy[1], 'gi'), proxy[0])
    })

    return uri
}

/**
 * 替换处理返回的数据中本地链接
 * @param body 接口返回的内容
 * @returns 替换本地链接后的数据结果
 */
export const handleResponseResource = <T>(body: T, options: Recordable) => {
    if (options.apiUrl.includes('proxy.yiring.com') && typeof body === 'object') {
        let text = JSON.stringify(body)

        // 处理内网地址的预览问题
        text = getExtranetUrl(text)

        return JSON.parse(text) as T
    }

    return body
}
