/**
 * 开发环境服务端地址解析。
 *
 * 背景：后台跑在开发机上，而开发机的局域网 IP 会随网络环境变化（见过 192.168.110.26 与
 * 192.168.110.15）。把 IP 写死在 config/api.uts 里，每次换网都得改代码重新编译，忘了改就
 * 请求到一台不存在的机器上，表现成"登录不上"——从报错里看不出是地址问题。
 *
 * 结论：**不要猜 IP**。微信开发者工具与后台跑在同一台机器上，所以 127.0.0.1 永远可达；
 * 页面来源本身也是 127.0.0.1（见请求的 Referer），因此同源、连跨域都不涉及。
 *
 * 曾试过用 uni.getNetworkType 读本机局域网 IP 自动探测，实测在开发者工具里拿不到 ip
 * （真机上该字段返回的是手机自己的地址，对连开发机也没有帮助），所以放弃这条路。
 *
 * 真机调试：手机访问不了 127.0.0.1。此时用 storage 覆盖即可，不必改代码：
 *   uni.setStorageSync('development-api-base-url', 'http://<开发机局域网IP>:8080')
 * 清了这条 key 就回到开发者工具适用的默认值。
 */

/**
 * 开发者工具与本机后台：回环地址，跟网络怎么变无关。
 *
 * 不要写具体局域网 IP（曾经写成 192.168.110.26:8080，别人拉到代码后所有请求都打到那台机器上，
 * 表现成"小程序读不到数据"）。127.0.0.1 在开发者工具里永远指向本机后台。
 */
const loopbackDevelopmentBaseUrl = 'http://127.0.0.1:8080'

/**
 * 真机调试用的开发机局域网地址：手机上的 127.0.0.1 指手机自己，连不到后台，
 * 必须用开发机的局域网 IP。换网/换 IP 时改这一行即可（也可以在真机调试控制台用下面的 storage 覆盖）。
 */
const lanDevelopmentBaseUrl = 'http://192.168.110.13:8080'

/** 覆盖用的 storage key，真机调试时写入开发机局域网地址。 */
const overrideStorageKey = 'development-api-base-url'

/**
 * 开发环境基础地址：优先级
 * 1. 真机调试时手动写入的 storage 覆盖值；
 * 2. 微信开发者工具 → 回环地址 127.0.0.1（工具与后台同机，永远可达）；
 * 3. 真机 → 开发机局域网地址（手机访问不了 127.0.0.1）。
 */
export const developmentApiBaseUrl = (): string => {
	const override = uni.getStorageSync(overrideStorageKey)
	if (override != null && (override as string).trim().length > 0) return (override as string).trim()
	const info = uni.getSystemInfoSync()
	const platform = info != null && info.platform != null ? '' + info.platform : ''
	if (platform == 'devtools') return loopbackDevelopmentBaseUrl
	return lanDevelopmentBaseUrl
}

/**
 * 在 App 启动时调用。这里只做一次记录，方便排查"请求打到哪台机器"。
 */
export const initializeDevelopmentApiBaseUrl = () => {
	console.log('Development API base url: ' + developmentApiBaseUrl())
}
