<template>
	<view class="promo-modal-page">
		<!-- 顶部导航栏 -->
		<view class="nav-bar">
			<view class="back" @tap="navigateBack">
				<uni-icons type="left" size="20" />
			</view>
			<text class="title">推广链接</text>
		</view>
		
		<!-- 页面内容 -->
		<view class="content">
		<!-- 用户信息 -->
			<view class="user-info-modal">
			<view class="avatar-frame">
					<image class="avatar-img" :src="userInfo.headImage || '/static/avatar.png'" mode="aspectFill" />
			</view>
				<view class="nickname">{{userInfo.nickName || '用户'}}</view>
		</view>
		<!-- 二维码区 -->
		<view class="qrcode-modal-section">
			<image class="qrcode-img" :src="qrcodeUrl" mode="widthFix" />
			<!-- <view class="invite-code">邀请码：{{inviteCode}}</view> -->
		</view>
		<!-- 底部按钮 -->
		<view class="bottom-btns-modal">
				<button class="btn gray" open-type="share">分享给好友</button>
				<button class="btn green" @tap="saveToAlbum">保存到本地</button>
			</view>
		</view>
	</view>
</template>

<script>
	import pullRefreshMixin from '@/pages/mixins/pullRefreshMixin.js'
	import config from '@/api/config.js'

	export default {
		mixins: [pullRefreshMixin],
		data() {
			return {
				userInfo: {},
				qrcodeUrl: '/static/qrcode.png',
				inviteCode: '888888',
			}
		},
		onLoad() {
			// 获取用户信息和二维码
			this.fetchUserInfo()
			this.getQrcode()
		},
		// 微信小程序分享配置
		// #ifdef MP-WEIXIN
		onShareAppMessage() {
			return {
				title: `${this.userInfo.nickName || '用户'}邀请您一起参与旧衣回收`,
				path: `/pages/component/home?shareId=${this.inviteCode}`,
				imageUrl: this.qrcodeUrl || '/static/share-default.png'
			}
		},
		onShareTimeline() {
			return {
				title: `${this.userInfo.nickName || '用户'}邀请您一起参与旧衣回收，环保从我做起！`,
				query: `shareId=${this.inviteCode}`,
				imageUrl: this.qrcodeUrl || '/static/share-default.png'
			}
		},
		// #endif
		methods: {
			async onRefresh() {
				// 模拟刷新数据
				await new Promise(resolve => setTimeout(resolve, 1000))
				uni.stopPullRefresh()
			},
			navigateBack() {
				uni.navigateBack()
			},
			// 获取用户信息
			fetchUserInfo() {
				if (uni.getStorageSync('token')) {
					this.$api("getUserByToken", {}, (res) => {
						if (res.code == 200) {
							this.userInfo = res.result
							// 更新邀请码
							if (res.result.intentioCode) {
								this.inviteCode = res.result.intentioCode
							}
						}
					})
				}
			},
			
            getQrcode(){
                // 获取全局二维码路径
                if (getApp().globalData.qr_path) {
                    console.log('获取到二维码路径', getApp().globalData.qr_path)
                    this.qrcodeUrl = getApp().globalData.qr_path
                } else {
                    console.log('全局二维码路径不存在')
                    uni.getImageInfo({
						src: `${config.baseUrl}/recycle-admin/applet/promotion/getInviteCode?token=${uni.getStorageSync('token')}`,
						success: res => {
							getApp().globalData.qr_path = res.path
							console.log(getApp().globalData.qr_path, 'qr_path')
							this.qrcodeUrl = getApp().globalData.qr_path
						},
						fail: err => {
							console.log('QR code load failed:', err)
						}
					})
                }
            },

			// 保存到手机相册
			saveToAlbum() {
				if (!this.qrcodeUrl) {
					uni.showToast({
						title: '二维码还未加载完成',
						icon: 'none'
					})
					return
				}
				
				// 先授权相册权限
				uni.getSetting({
					success: (res) => {
						if (!res.authSetting['scope.writePhotosAlbum']) {
							// 没有权限，申请权限
							uni.authorize({
								scope: 'scope.writePhotosAlbum',
								success: () => {
									this.doSaveImage()
								},
								fail: () => {
									// 权限被拒绝，引导用户手动开启
									uni.showModal({
										title: '提示',
										content: '需要您授权保存相册权限',
										showCancel: false,
										success: () => {
											uni.openSetting()
										}
									})
								}
							})
						} else {
							// 已有权限，直接保存
							this.doSaveImage()
						}
					}
				})
			},
			// 执行保存图片
			doSaveImage() {
				uni.saveImageToPhotosAlbum({
					filePath: this.qrcodeUrl,
					success: () => {
						uni.showToast({
							title: '保存成功',
							icon: 'success'
						})
					},
					fail: (err) => {
						console.log('保存失败', err)
						uni.showToast({
							title: '保存失败',
							icon: 'none'
						})
					}
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
	.promo-modal-page {
		min-height: 100vh;
		background: #f8f8f8;
		padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
		overflow: hidden;
		height: 100vh;
	}

	.nav-bar {
		display: flex;
		align-items: center;
		height: calc(150rpx + var(--status-bar-height));
		padding: 0 32rpx;
		padding-top: var(--status-bar-height);
		background: #fff;
			position: fixed;
			top: 0;
			left: 0;
			right: 0;
		z-index: 999;
		box-sizing: border-box;

		.back {
			padding: 20rpx;
			margin-left: -20rpx;
			}

		.title {
				flex: 1;
				text-align: center;
			font-size: 34rpx;
			font-weight: 500;
				color: #222;
		}
	}

	.content {
		padding: 30rpx 0 0 0;
		margin-top: calc(150rpx + var(--status-bar-height) + 80rpx);
		height: 100%;
		display: flex;
		flex-direction: column;
		align-items: center;
		overflow: hidden;
		box-sizing: border-box;

		.user-info-modal {
			display: flex;
			flex-direction: column;
			align-items: center;
			margin-bottom: 48rpx;

			.avatar-frame {
				width: 104rpx;
				height: 104rpx;
				border-radius: 10rpx;
				overflow: hidden;
				background: #f2f2f2;
				box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.10);

				.avatar-img {
					width: 104rpx;
					height: 104rpx;
					object-fit: cover;
					display: block;
				}
			}

			.nickname {
				margin-top: 24rpx;
				font-size: 32rpx;
				font-weight: bold;
				color: #222;
				text-align: center;
			}
		}

		.qrcode-modal-section {
			width: 300rpx;
			display: flex;
			flex-direction: column;
			align-items: center;
			margin-bottom: 48rpx;

			.qrcode-img {
				width: 100%;
				height: 100%;
				background: #fff;
				border-radius: 24rpx;
				box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.08);
			}

			.invite-code {
				margin-top: 32rpx;
				font-size: 30rpx;
				color: #222;
				font-weight: bold;
				text-align: center;
			}
		}

		.bottom-btns-modal {
			position: fixed;
			left: 0;
			right: 0;
			bottom: 0;
			display: flex;
			justify-content: space-between;
			padding: 24rpx 32rpx calc(env(safe-area-inset-bottom) + 24rpx) 32rpx;
			background: #fff;
			z-index: 100;

			.btn {
				flex: 1;
				height: 88rpx;
				border-radius: 44rpx;
				font-size: 32rpx;
				font-weight: bold;
				margin: 0 12rpx;
				border: none;

				&.gray {
					background: linear-gradient(90deg, #b2f08d, #39e9d2);
					color: #fff;
				}

				&.green {
					background: linear-gradient(90deg, #b2f08d, #39e9d2);
					color: #fff;
				}
			}
		}
	}
</style>