import {
	login,
	getMyIndexInfo
} from "../config/user"
import {
	URL,
	appid
} from "@/config/url.js"
// import { GET_PHONE_NUMBER_URL } from "../config/url"

// 微信登录方法
export const wxLogin = () => {
	return new Promise((resolve, reject) => {
		// 1. 获取微信登录凭证
		uni.login({
			provider: 'weixin',
			success: async (loginRes) => {

				try {
					if (loginRes.code) {
						// 2. 发送 code 到后端换取 token
						const result = await login({
							code: loginRes.code,
							appid: "wx2165f0be356ae7a9"
						})

						if (result.code === 200) {
							// 3. 保存token和用户信息

							uni.setStorageSync('token', result.data.LoginWxVo.access_token)
							uni.setStorageSync('client_id', result.data.LoginWxVo.client_id)

							resolve(result.data)
						} else {
							throw new Error(result.message || '登录失败')
						}
					} else {
						throw new Error('获取微信登录凭证失败')
					}
				} catch (error) {

					uni.showToast({
						title: error.message || '登录失败',
						icon: 'none'
					})
					reject(error)
				}
			},
			fail: (error) => {
				uni.showToast({
					title: '微信登录失败',
					icon: 'none'
				})
				reject(error)
			}
		})
	})
}

// 检查登录状态
// export const checkLogin = () => {
//   const token = uni.getStorageSync('token')
//   return !!token
// }

// 获取用户信息
export const getUserInfo = () => {
	return new Promise(async (res, rej) => {
		const result = await getMyIndexInfo({
			isHide: false,
		})
		res(result)
	})
}

// 获取用户手机号
export const getUserPhoneNumber = (code) => {
	return new Promise(async (resolve, reject) => {
		try {
			// 获取登录态信息
			const token = uni.getStorageSync('token')
			
			if (!token) {
				reject(new Error('用户未登录'))
				return
			}
			
			console.log('开始请求获取手机号，code=', code, '请求地址=', URL + '/app/user/getPhoneNumber')
			
			// 发送请求到后端获取手机号
			uni.request({
				url: URL + '/app/user/getPhoneNumber',
				method: 'POST',
				header: {
					'Authorization': 'Bearer ' + token,
					'clientId': uni.getStorageSync('client_id'),
					'Content-Type': 'application/json'
				},
				data: {
					code: code, // 微信获取手机号授权后的临时code
					appid: appid
				},
				success: (res) => {
					console.log('请求获取手机号接口成功，原始响应:', JSON.stringify(res))
					
					// 检查HTTP状态码
					if (res.statusCode !== 200) {
						reject(new Error(`HTTP错误: ${res.statusCode}`))
						return
					}
					
					// 确保响应体存在
					if (!res.data) {
						reject(new Error('服务器返回空数据'))
						return
					}
					
					// 正常返回响应数据，不做额外判断，由调用方处理业务状态码
					resolve(res.data)
				},
				fail: (err) => {
					console.error('请求获取手机号接口网络错误:', err)
					reject(new Error('请求获取手机号接口失败: ' + (err.errMsg || JSON.stringify(err))))
				}
			})
		} catch (error) {
			console.error('获取手机号过程中出现异常:', error)
			reject(new Error('获取手机号异常: ' + (error.message || JSON.stringify(error))))
		}
	})
}

// 调用微信支付分接口
export const initiateWeChatScorePayment = (paymentData) => {
	return new Promise((resolve, reject) => {
		// 确保paymentData包含所需数据
		if (!paymentData || !paymentData.data || !paymentData.data.package) {
			reject(new Error('支付参数不完整'));
			return;
		}

		// 使用wx.openBusinessView打开微信支付分小程序
		wx.openBusinessView({
			businessType: 'wxpayScoreUse',
			extraData: {
				mch_id: paymentData.data.mch_id,
				package: paymentData.data.package
			},
			success: (businessRes) => {
				// 根据返回结果判断是否完成支付
				if (businessRes.errMsg === 'openBusinessView:ok') {
					resolve(businessRes);
				} else {
					reject(new Error('支付流程未完成'));
				}
			},
			fail: (error) => {
				console.error('微信支付分小程序调用失败', error);
				uni.showToast({
					title: error.errMsg || '支付分接口调用失败',
					icon: 'none'
				});
				reject(error);
			}
		});
	});
}

export const getQueryString = function(url, name) {
	var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
	var r = url.substr(1).match(reg)
	if (r != null) {
		return r[2]
	}
	return null;
}