import {
	navigateTo
} from '@/common/router'
import {
	getPlatform, getAdvert, getConfig, getDanYe
} from '../server/config';
import { logout, clearLoginTokens } from '../server/auth';
import ConfigManager from '../config';
/**
 * 多端平台抽象基类（父类）
 * 定义所有端必须实现的方法
 */
class BasePlatform {
	constructor() {
		if (new.target === BasePlatform) {
			throw new Error('BasePlatform 是抽象类，不能直接实例化');
		}
		this.code = ''; // 平台代码（WEB/MP/APP）
		this.env = ''; // 运行环境标识
		this.config = null;
	}
	async getConfig() {
		// return new Promise((resolve, reject) => {
		console.log("获取配置", this.config);
		if (this.config != null) {
			return this.config;
		}
		const res = await getPlatform();
		this.config = res;
		return this.config;
	}
	async appData() {
		await this.loadCacheData();
		uni.switchTab({
			url: '/pages/shouye/index'
		});
	}

	/**
	 * 加载缓存
	 */
	async loadCacheData() {
		this.cacheData = {};
		await ConfigManager.init();
		console.log('初始化成功.。。。。');
		//首页轮播图
		await getAdvert(1);
		//推荐
		await getAdvert(5);
		//公告
		await getDanYe(3);
	}
	/**
	 * 获取是否需要审核
	 * @returns {boolean} 是否需要审核
	 */
	getIsCheck(tag) {
		return this.config?.isCheck ?? false;
	}
	getPayData(url, data) {
		throw new Error('子类必须实现 getPayData 方法');
	}
	/**
	 * 
	 */
	chooseAddress() {
		return new Promise((resolve, reject) => {
			throw new Error('子类必须实现 chooseAddress 方法');
		});
	}
	/**
	 * 支付方法（子类必须实现）
	 * @param {number} amount - 支付金额（分）
	 * @param {string} orderId - 订单号
	 */
	pay({
		data
	}, event) {
		throw new Error('子类必须实现 pay 方法');
	}

	/**
	 * 分享方法（子类必须实现）
	 * @param {object} params - 分享参数 { title, desc, image, url }
	 */
	share({
		title,
		desc,
		link,
		image
	}) {
		throw new Error('子类必须实现 share 方法');
	}

	/**
	 * 通用方法（所有端共用）
	 */
	getPlatformInfo() {
		return {
			code: this.code,
			env: this.env,
			ua: navigator?.userAgent || ''
		};
	}

	downloadFile(url) {
		return new Promise((resolve, reject) => {
			throw new Error('子类必须实现 downloadFile 方法');
		});
	}
	AppLaunch(options) {
		throw new Error('子类必须实现 AppLaunch 方法');
	}
	/**
	 * 获取订单号
	 */
	getOrderNo(event) {
		throw new Error('子类必须实现 getOrderNo 方法');
	}
	delOrderNo() {

	}

	/**
	 * 获取用户中心菜单列表
	 * @returns {Array} 菜单项数组，每项包含id, show, title, icon, path和handler
	 */
	getUserMenuList() {
			let m = [{
				id: 1,
				show: true,
				title: '消费记录',
				icon: 'ms/s1.png',
				path: '/pages/other/order_list',
				handler: this.navigateToPath.bind(this)
			},
			{
				id: 3,
				show: true,
				title: '我的收藏',
				icon: 'ms/s3.png',
				path: '/package/mine/collect',
				handler: this.navigateToPath.bind(this)
			},
			{
				id: 4,
				show: true,
				title: '优惠券',
				icon: 'ms/s4.png',
				path: '/pages/user/coupon',
				handler: this.navigateToPath.bind(this)
			},
			{
				id: 5,
				show: true,
				title: '邀请好友',
				icon: 'ms/s5.png',
				path: '/pages/user/tui-guang',
				handler: this.navigateToPath.bind(this)
			},
			{
				id: 6,
				show: true,
				title: '加入福利群',
				icon: 'ms/s6.png',
				path: '',
				handler: this.handleJoinGroup.bind(this)
			},
			{
				id: 11,
				show: true,
				title: '设置',
				icon: 'ms/settings.png',
				path: '/pages/user/settings',
				handler: this.navigateToPath.bind(this)
			}
			];

			// "关于"菜单：如需显示可将 show 改为 true
			const customServiceMenu = {
				id: 10,
				show: false,
				title: '关于',
				icon: 'ms/about.png',
				path: '/pages/other/about',
				handler: this.navigateToPath.bind(this)
			};
			m.push(customServiceMenu);
			return m;
		}


	/**
	 * 导航到指定页面
	 * @param {Object} item 菜单项
	 */
	navigateToPath(item) {
		// 需要登录才能访问的页面路径
		const needLoginPaths = [
			'/pages/other/order_list',    // 消费记录
			'/package/mine/collect',       // 我的收藏
			'/pages/user/coupon',          // 优惠券
			'/pages/user/tui-guang',       // 邀请好友
			'/pages/user/cancel-account-page', // 注销账号
		];
		
		// 检查是否需要登录
		const needLogin = needLoginPaths.some(path => item.path.startsWith(path));
		if (needLogin) {
			const token = uni.getStorageSync('token');
			if (!token) {
				uni.setStorageSync('redirect', item.path);
				uni.showToast({
					title: '请先登录',
					icon: 'none'
				});
				setTimeout(() => {
					navigateTo('/pages/user/login');
				}, 100);
				return;
			}
		}
		
		navigateTo(item.path);
	}

	/**
	 * 处理加入福利群
	 * @param {Object} item 菜单项
	 * @param {Object} context 页面上下文
	 */
	handleJoinGroup(item, context) {
		if (context && context.$refs && context.$refs.qunliao_show) {
			context.$refs.qunliao_show.open();
		}
	}

	/**
	 * 处理退出登录
	 * 清除所有Token（accessToken、refreshToken、tokenExpireTime）
	 * 可选调用后端撤销接口
	 */
	handleLogout() {
		uni.showModal({
			title: '提示',
			content: '确定要退出登录吗？',
			success: async (res) => {
				if (res.confirm) {
					try {
						// 调用后端撤销接口并清除本地存储
						await logout();
					} catch (error) {
						console.log('退出登录时发生错误:', error);
						// 即使后端调用失败，也确保清除本地存储
						clearLoginTokens();
					}
					// 刷新页面
					// #ifdef H5
					window.location.href = window.location.href;
					// #endif
					// #ifndef H5
					uni.reLaunch({
						url: '/pages/shouye/index'
					});
					// #endif
				}
			}
		});
	}
	/**
	 * 开启调试
	 */
	startDeb() {

	}
	/**
	 * 关闭调试
	 */
	closeDeb() {

	}
	getVersion() {
		return '1.0.0';
	}
	getUserAgreement() {
		navigateTo('/pages/guize/guize', { type: 4 })
	}
	getPrivacyAgreement() {
		navigateTo('/pages/guize/guize', { type: 5 })
	}

}
export default BasePlatform;