<template>
  <view class="page__view">
    
		<!-- 导航栏 -->
		<navbar leftClick @leftClick="$utils.navigateBack" bgColor="#4883F9" color="#FFFFFF" />

		<!-- height: 1184rpx; -->
    <view style="width: 750rpx; height: 890rpx; overflow: hidden;">
      <canvas id="myCanvas" canvas-id="firstCanvas1" type="2d" style="width: 100%; height: 100%;"></canvas>
    </view>

    <view class="flex bottom">
      <view class="flex">
        <button class="btn" @click="saveImg">保存到手机</button>
      </view>
    </view>

  </view>
</template>

<script>
  export default {
		data() {
			return {
				wxCodeImage: '',
				baseUrl: 'https://image.hhlm1688.com/',
				canvas: {},
        posterData: {},
			}
		},
    async onLoad() {
      uni.showLoading({
          title: '加载中...'
      });
      this.posterData = uni.getStorageSync('posterData')
			await this.fetchQrCode(this.posterData.path)
      uni.hideLoading();
      this.draw()
    },
    methods: {
			async fetchQrCode(path) {
				try {
					this.wxCodeImage = (await this.$fetch('getInviteCode', { path }))?.url

				} catch (err) {

				}
			},
			draw() {

				uni.showLoading({
					title: "拼命绘画中..."
				})

				wx.createSelectorQuery()
					.select('#myCanvas') // 绘制的canvas的id
					.fields({
						node: true,
						size: true
					})
					.exec(async (res) => {
						const canvas = res[0].node
						// 渲染上下文
						const ctx = canvas.getContext('2d')
						// Canvas 画布的实际绘制宽高
						const width = res[0].width
						const height = res[0].height
						// 初始化画布大小
						const dpr = wx.getWindowInfo().pixelRatio

						//根据dpr调整
						// dpr  2 4
						//      3 6
						console.log("--dpr", dpr)
						canvas.width = width * dpr
						canvas.height = height * dpr

						let Ratio = canvas.width / 750

						this.canvas = canvas
						ctx.scale(dpr, dpr)
						ctx.clearRect(0, 0, width, height)

						ctx.fillStyle = '#fff'
						ctx.fillRect(0, 0, canvas.width, canvas.height)

            // 海报图片
            const paperImage = canvas.createImage()
						paperImage.src = this.posterData.paperImage
						paperImage.onload = () => {
							const w = 750 * Ratio / dpr
							// const h = 1184 * Ratio / dpr
							const h = 890 * Ratio / dpr
							ctx.drawImage(paperImage, 0, 0, w, h)

              //二维码图片
              const coderImage = canvas.createImage()
              coderImage.src = this.wxCodeImage
              coderImage.onload = () => {
                // const x = 539 * Ratio / dpr
								const x = 560 * Ratio / dpr
								// const y = 987 * Ratio / dpr
                const y = 693 * Ratio / dpr
                const size = 162 * Ratio / dpr
                ctx.drawImage(coderImage, x, y, size, size)

                uni.hideLoading()
              }
						}

					})

			},
			saveImg() {
				this.$authorize('scope.writePhotosAlbum').then((res) => {
					this.imgApi()
				})
			},
			imgApi() {
        uni.showLoading({
            title: '保存中...'
        });
				wx.canvasToTempFilePath({
					x: 0,
					y: 0,
					width: this.canvas.width,
					height: this.canvas.height,
					canvas: this.canvas,
					success: (res) => {
						let tempFilePath = res.tempFilePath;
						this.saveImgToPhone(tempFilePath)
					},
					fail: (err) => {
						console.log('--canvasToTempFilePath--fail', err)
				    uni.hideLoading();
					}
				}, this);

			},
			saveImgToPhone(image) {
				/* 获取图片的信息 */
				uni.getImageInfo({
					src: image,
					success: function(image) {
						/* 保存图片到手机相册 */
						uni.saveImageToPhotosAlbum({
							filePath: image.path,
							success: function() {
								uni.showModal({
									title: '保存成功',
									content: '图片已成功保存到相册',
									showCancel: false
								});
							},
							complete(res) {
								console.log(res);
				        uni.hideLoading();
							}
						});
					}
				});
			}
      
    },
  }
</script>

<style scoped lang="scss">

  .page__view {
    background: $uni-bg-color-grey;
  }

  .bottom {
    position: fixed;
    left: 0;
    bottom: 0;
    width: 100vw;
    height: 154rpx;
		padding-bottom: env(safe-area-inset-bottom);
    background: #FFFFFF;

    .btn {
      padding: 20rpx 77rpx;
      font-size: 28rpx;
      color: #FFFFFF;
      background: #4883F9;
      border-radius: 14rpx;
    }
  }
</style>