import uiConfig from "@/utils/ui-config.js"
import request from '@/utils/request';
const aLiSDKModule = uni.requireNativePlugin('AliCloud-NirvanaPns');

/**
 * 【内部方法】展示登录控制器（无需对外暴露）
 * @param {Object} config - 登录UI配置
 */
function _presentLoginController(config) {
	uni.showLoading({
		mask: true
	});

	// 调用SDK获取登录Token
	aLiSDKModule.getLoginToken(
		5000,
		config,
		(tokenResult) => {
			uni.hideLoading();
			console.log('获取Token结果：', JSON.stringify(tokenResult));

			switch (tokenResult.resultCode) {
				case "600001":
					console.log("授权页拉起成功");
					aLiSDKModule.setCheckboxIsChecked(false);
					break;
				case "600000":
					console.log("获取Token成功，可前往服务端换取手机号");
					request.post('/user/phoneLogin', {
						token: tokenResult.token,
					}).then(result => {
						if (result.code == 200) {
							// 登录成功：
							uni.setStorageSync('accessToken', result.data.access_token);
							uni.setStorageSync('refreshToken', result.data.refresh_token);
							uni.setStorageSync('refresh_token_expries', result.data.refresh_token_expries);
							uni.setStorageSync('loginAccount', result.data.account); // 保存登录的手机号
							if (!uni.getStorageSync('searchCity')) {
								let searchCity = {
									adcode: "130983",
									cCode: "130900",
									center: "117.332895,38.372566",
									name: "沧州市",
									pcode: "130000",
								}
								uni.setStorageSync('searchCity', searchCity)
							}
						} else {
							uni.showToast({
								title: result.msg,
								icon: 'none'
							});
						}
					}).catch(err => {
						uni.showToast({
							title: err.msg,
							icon: 'none'
						})
					}).finally(() => {
						//手动关闭授权页
						aLiSDKModule.quitLoginPage();
					})

					break;
				case "700020":
					console.log("授权页已销毁。")
					break;
				default:
					// 登录失败跳转到指定页面
					uni.navigateTo({
						url: '/pages/blogPopup/blogPopup'
					});
					aLiSDKModule.quitLoginPage();
					break;
			}
		},
		(clickResult) => {
			console.log('用户操作结果：', JSON.stringify(clickResult));

			switch (clickResult.resultCode) {
				case "700000":
					console.log("用户点击了返回");
					break;
				case "700001":
					console.log("用户切换其他登录方式");
					aLiSDKModule.quitLoginPage();
					uni.navigateTo({
						url: '/pages/blogPopup/blogPopup'
					});
					break;
				case "700002":
					console.log("用户点击登录按钮");
					// 未勾选协议时提示
					console.log("用户点击登录按钮");
					if (!clickResult.result.isChecked) {
						if (!config.uiConfig.setPrivacyAlertIsNeedShow) {
							plus.nativeUI.toast("请同意服务条款");
						}
					}
					break; // 修复原代码缺失的break
				case "700003":
					console.log("用户点击checkBox");
					break;
				case "700004":
					console.log("用户点击协议", clickResult);
					break;
				case "700010":
				case "700011":
					console.log("用户点击返回/物理返回键（Android）");
					aLiSDKModule.quitLoginPage();
					break;
				case "700006":
				case "700007":
				case "700008":
				case "700009":
					console.log(`二次授权弹窗操作：${clickResult.resultCode}`);
					break;
				default:
					console.log('未知的用户操作码：', clickResult.resultCode);
					break;
			}
		},
		(customUiResult) => {
			console.log("自定义控件点击结果：", JSON.stringify(customUiResult));

			switch (customUiResult.widgetId) {
				case "close":
					aLiSDKModule.quitLoginPage();
					break;
				case "closePrivacyAlert":
					aLiSDKModule.closePrivactAlertView(); // 确认SDK方法名是否正确（注意Privacy拼写）
					break;
				default:
					uni.showToast({
						title: `点击了自定义按钮：${customUiResult.widgetId}`,
						icon: 'none'
					});
					break;
			}
		}
	);
}

/**
 * 【全局方法】跳转到登录页（一键登录）
 * @returns {void}
 */
export function oprPresentLogin() {
	try {
		// 加速登录页加载
		aLiSDKModule.accelerateLoginPage(5000, (result) => {
			console.log('加速授权页结果：', JSON.stringify(result));

			if (result.resultCode === '600000') {
				console.log("加速授权页拉起成功");
				// 延迟执行，确保配置构建完成
				setTimeout(() => {
					try {
						// 额外的try/catch，防止配置构建或登录控制器调用出错
						const config = uiConfig.buildSheet();
						_presentLoginController(config);
					} catch (innerError) {
						console.error("构建登录配置或调用登录控制器失败：", innerError);
						// 这里可以添加配置构建失败后的备用操作
					}
				}, 100);
			} else {
				console.error("授权页加速拉起失败：", result.msg);
				// 授权页加速失败的备用处理逻辑
				uni.navigateTo({
					url: '/pages/blogPopup/blogPopup'
				});
			}
		});
	} catch (error) {
		// 捕获aLiSDKModule未定义或其他执行错误
		console.error("跳转到登录页时发生错误：", error);
		uni.navigateTo({
			url: '/pages/blogPopup/blogPopup'
		});
	}
}