/**
 * 用户状态管理模块
 */

import {
	reactive,
	computed
} from 'vue';
import userApi from '@/api/user.js';

// 用户状态数据
const state = reactive({
	userInfo: {
		nickname: '单卡用户', // 昵称
		avatar: 'https://img1.baidu.com/it/u=2462918877,1866131262&fm=253&fmt=auto&app=138&f=JPEG?w=506&h=500', // 头像
		deviceId: '' // 设备ID
	},
	// 用户信息
	isLoggedIn: false, // 登录状态
	error: null // 错误信息
});

// 计算属性
const getters = {
	// 是否已登录
	isLoggedIn: computed(() => state.isLoggedIn && !!state.userInfo.deviceId),
	// 用户信息
	userInfo: computed(() => state.userInfo)
};

// 操作方法
const actions = {
	// 获取Cookies
	async getCookie() {
		try {
			return userApi.getCookie();
		} catch (error) {
			console.error('获取微信授权失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 登录
	async login(iccidMark) {
		try {
			// 调用login接口
			const result = await userApi.login(iccidMark);

			// 如果登录成功，设置登录状态和用户信息
			if (!result.system_result_message_key) {
				state.isLoggedIn = true;
				state.userInfo.deviceId = iccidMark;
				// 同步到本地存储
				uni.setStorageSync('device_id', iccidMark);
				uni.setStorageSync('isLoggedIn', true);
				console.log('登录成功，已设置登录状态');
			}

			return result;
		} catch (error) {
			console.error('登录失败:', error);
			state.error = error.message;
			state.isLoggedIn = false;
			throw error;
		}
	},

	// 获取用户实名信息
	async getRealNameInfo() {
		try {
			return userApi.getRealNameInfo();
		} catch (error) {
			console.error('获取用户实名信息失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取用户信息
	async getUserInfo() {
		try {
			const result = await userApi.getUserInfo();
			if (result?.entity) {
				state.userInfo.avatar = result.entity.headimgurl
				state.userInfo.nickname = result.entity.nickname
			} else {
				const result_once = await userApi.getUserInfo();
				if (result_once?.entity) {
					state.userInfo.avatar = result_once.entity.headimgurl
					state.userInfo.nickname = result_once.entity.nickname
				}
			}
			return result
		} catch (error) {
			console.error('获取用户信息失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取wxUrl
	async getWxUrl() {
		try {
			return userApi.getWxUrl();
		} catch (error) {
			console.error('获取获取wxUrl失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取getOpenId
	async getOpenId() {
		try {
			return userApi.getOpenId();
		} catch (error) {
			console.error('获取获取getOpenId失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 微信授权
	async getAuthorize(code) {
		try {
			return userApi.getAuthorize(code);
		} catch (error) {
			console.error('获取微信授权失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取微信支付签名
	async getWxPaySign() {
		try {
			return userApi.getWxPaySign();
		} catch (error) {
			console.error('获取微信支付签名失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 恢复出厂设置
	async restDevice(deviceId) {
		try {
			return userApi.restDevice(deviceId);
		} catch (error) {
			console.error('恢复出厂设置失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 重启设备
	async restartDevice(deviceId) {
		try {
			return userApi.restartDevice(deviceId);
		} catch (error) {
			console.error('重启设备失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取设备信息
	async getCardInfo() {
		try {
			return userApi.getCardInfo();
		} catch (error) {
			console.error('获取设备信息失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取设备信息(管理平台)
	async getDeviceInfoAdmin(device_id) {
		try {
			return userApi.getDeviceInfoAdmin(device_id);
		} catch (error) {
			console.error('获取设备信息(管理平台)', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取首页信息-设备列表
	async getSwitchCardList() {
		try {
			return userApi.getSwitchCardList();
		} catch (error) {
			console.error('获取首页信息-设备列表失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 修改WiFi
	async modifyWifi(data) {
		try {
			return userApi.modifyWifi(data);
		} catch (error) {
			console.error('修改WiFi失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取套餐列表
	async getPackageList() {
		try {
			return userApi.getPackageList();
		} catch (error) {
			console.error('获取套餐列表失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 智能诊断
	async intelligentDiagnosis() {
		try {
			return userApi.intelligentDiagnosis();
		} catch (error) {
			console.error('智能诊断失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取绑定手机号
	async getDeviceBindPhone() {
		try {
			return userApi.getDeviceBindPhone();
		} catch (error) {
			console.error('获取绑定手机号失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取验证码
	async getSmsNumber(mobile) {
		try {
			return userApi.getSmsNumber(mobile);
		} catch (error) {
			console.error('获取验证码失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 绑定手机号
	async bindCardPhone(mobile, code) {
		try {
			return userApi.bindCardPhone(mobile, code);
		} catch (error) {
			console.error('绑定手机号失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 是否显示主号
	async getIsOnlyMainCard(iccid) {
		try {
			return userApi.getIsOnlyMainCard(iccid);
		} catch (error) {
			console.error('是否显示主号失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 获取实名地址
	async getRealNameAddress(iccid) {
		try {
			return userApi.getRealNameAddress(iccid);
		} catch (error) {
			console.error('获取实名地址失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 切换运营商
	async changeOperator(esim, iccid) {
		try {
			return userApi.changeOperator(esim, iccid);
		} catch (error) {
			console.error('切换运营商失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 1. checkHasGzhOpenId 判断当前用户是否已经绑定了微信公众号的
	async checkHasGzhOpenId() {
		try {
			return userApi.checkHasGzhOpenId();
		} catch (error) {
			console.error('checkHasGzhOpenId 失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 2. checkYgosWxInfo 检查当前用户是否具有与微信支付相关的特定信息
	async checkYgosWxInfo() {
		try {
			return userApi.checkYgosWxInfo();
		} catch (error) {
			console.error('checkYgosWxInfo 失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 3. checkXwzfWxInfo 检查当前用户是否具有与微信支付相关的特定信息
	async checkXwzfWxInfo() {
		try {
			return userApi.checkXwzfWxInfo();
		} catch (error) {
			console.error('checkXwzfWxInfo 失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 4. 获取支付列表
	async getPayList(mealId) {
		try {
			return userApi.getPayList(mealId);
		} catch (error) {
			console.error('获取支付列表失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 5. createOrder 创建订单 并拉起支付 这个会返回微信支付参数
	async createOrder(data) {
		try {
			return userApi.createOrder(data);
		} catch (error) {
			console.error('createOrder 失败:', error);
			state.error = error.message;
			throw error;
		}
	},

	// 登出（清除Cookie和状态）
	async logout() {
		try {
			await userApi.logout();

			// 重置状态
			state.isLoggedIn = false;
			state.userInfo = {
				nickname: '',
				avatar: '',
				deviceId: ''
			};
			state.error = null;

			// 清除本地存储
			uni.removeStorageSync('device_id');
			uni.removeStorageSync('isLoggedIn');

			console.log('退出登录成功，已清除登录状态');

			// 跳转到登录页
			uni.redirectTo({
				url: '/pages/login/login'
			});
		} catch (error) {
			console.error('登出失败:', error);
			state.error = error.message;

			// 即使服务端退出失败，也要清除本地状态
			state.isLoggedIn = false;
			state.userInfo = {
				nickname: '',
				avatar: '',
				deviceId: ''
			};
			uni.removeStorageSync('device_id');
			uni.removeStorageSync('isLoggedIn');

			// 跳转到登录页
			uni.redirectTo({
				url: '/pages/login/login'
			});
		}
	},

	// 重置错误状态
	clearError() {
		state.error = null;
	},

	// 初始化登录状态（从本地存储恢复）
	initLoginState() {
		try {
			const deviceId = uni.getStorageSync('device_id');
			const isLoggedIn = uni.getStorageSync('isLoggedIn');

			if (deviceId && isLoggedIn) {
				state.isLoggedIn = true;
				state.userInfo.deviceId = deviceId;
				console.log('从本地存储恢复登录状态:', deviceId);
			} else {
				state.isLoggedIn = false;
				state.userInfo.deviceId = '';
				console.log('未找到有效的登录状态');
			}
		} catch (error) {
			console.error('初始化登录状态失败:', error);
			state.isLoggedIn = false;
			state.userInfo.deviceId = '';
		}
	},
};

// 创建用户store
const userStore = {
	state,
	getters,
	actions
};

export default userStore;