/*
 * @Author: fangqing lfangqing@126.com
 * @Date: 2023-10-17 13:45:04
 * @Description: 全局config 配置文件
 * @LastEditors: fangqing lfangqing@126.com
 * @LastEditTime: 2023-10-26 17:35:44
 */

// 获取环境变量
const ENV = import.meta.env
// 配置文件
let config = {

}
// 默认配置文件
const configSource = {
    appCode: ENV.VITE_APP_CODE,
    // 项目标识代码
    projectCode: `${ENV.VITE_APP_CODE}_${ENV.VITE_APP_ENV}`,
    // 项目名
    projectName: ENV.VITE_APP_NAME,
    // 资源base地址
    base: ENV.VITE_BASE,
    // 接口代理URL路径
    baseUrl: ENV.VITE_BASE_URL,
    // 模拟数据接口路径
    mockBaseUrl: ENV.VITE_BASE_MOCK_URL,
    // 服务端接口路径
    serverUrl: ENV.VITE_BASE_SERVER_URL,
    //国际化默认语言
    globalI18n: "zh-cn",
    // 客户端id
    clientId: "pcManageId",
    // 客户端密钥
    clientSecret: "pcManageSecret",
}

/**
 * @description: 重置全局配置
 * @return {*} 局默认配置 configSource
 */
const resetConfig = () => {
    config = { ...configSource }
    return config
}
resetConfig()

/**
 * @description: 设置全局配置
 * @param {*} cfg 配置项
 * @return {*} 新的全局配置
 */
const setConfig = cfg => {
    config = Object.assign(config, cfg)
    return config
}

/**
 * @description: 获取全局配置
 * @param {*} key  配置项   
 * @return {*} 新的全局配置项
 */
const getConfig = key => {
    if (typeof key === "string") {
        const arr = key.split(".")
        if (arr && arr.length) {
            let data = config
            arr.forEach(v => {
                if (data && typeof data[v] !== "undefined") {
                    data = data[v]
                } else {
                    data = null
                }
            })
            return data
        }
    }
    if (Array.isArray(key)) {
        const data = config
        if (key && key.length > 1) {
            let res = {}
            key.forEach(v => {
                if (data && typeof data[v] !== "undefined") {
                    res[v] = data[v]
                } else {
                    res[v] = null
                }
            })
            return res
        }
        return data[key]
    }
    return { ...config }
}

export { getConfig, setConfig, resetConfig }
