/**
 * 环境配置
 * 根据编译环境自动切换 API 地址
 */

// 环境列表
export const ENV = {
	DEV: 'development',
	PROD: 'production',
	TEST: 'test'
}

// 当前环境（默认测试环境）
let currentEnv = ENV.TEST

/**
 * 设置当前环境
 * @param {string} env - 环境名称
 */
export const setEnv = (env) => {
	if (Object.values(ENV).includes(env)) {
		currentEnv = env
	}
}

/**
 * 获取当前环境
 * @returns {string}
 */
export const getEnv = () => currentEnv

/**
 * 环境配置
 * 只配置域名，路由前缀在 request.js 中单独配置
 */
const ENV_CONFIG = {
	[ENV.DEV]: {
		name: '开发环境',
		domain: 'https://memo.test.miaoall.cn',
		debug: true,
		aesKey: '12345678901234567890123456789012',
		aesIv: '1234567890123456'
	},
	[ENV.TEST]: {
		name: '测试环境',
		domain: 'https://memo.test.miaoall.cn',
		debug: true,
		aesKey: '12345678901234567890123456789012',
		aesIv: '1234567890123456'
	},
	[ENV.PROD]: {
		name: '生产环境',
		domain: 'https://memo.miaoall.cn',
		debug: false,
		aesKey: 'a1s2d3f4g5h6j7k8l9z0xq1w2e3r4t5y6',
		aesIv: 'q1w2e3r4t5y6u7i8'
	}
}

/**
 * 获取当前环境的配置
 * @returns {Object}
 */
export const getEnvConfig = () => {
	return ENV_CONFIG[currentEnv] || ENV_CONFIG[ENV.TEST]
}

/**
 * 获取 API 域名
 * @returns {string}
 */
export const getDomain = () => getEnvConfig().domain

/**
 * 获取当前环境名称
 * @returns {string}
 */
export const getEnvName = () => getEnvConfig().name

/**
 * 是否为开发模式
 * @returns {boolean}
 */
export const isDev = () => currentEnv === ENV.DEV

/**
 * 是否为生产模式
 * @returns {boolean}
 */
export const isProd = () => currentEnv === ENV.PROD

/**
 * 是否为测试模式
 * @returns {boolean}
 */
export const isTest = () => currentEnv === ENV.TEST

// 默认导出配置
export default {
	ENV,
	getEnv,
	setEnv,
	getEnvConfig,
	getDomain,
	getEnvName,
	isDev,
	isProd,
	isTest
}
