// mycomponent/temp/qrcode/qrcode.js
var app = getApp();
import drawQrcode from "../../../../utils/weapp.qrcode.esm.js";
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    isshow: {
      value: false,
      type: Boolean,
    },
    showcarrfootBol: {
      type: null,
    },
    iPnoneBottomBol: {
      type: null,
    },
  },

  /**
   * 组件的初始数据
   */
  data: {
    errorFlag: false,
    errorMsg: "",
    poster: "",
    poster_id: 0,
    loading: 0,
    getFlag: true,
    step: 1.5,
  },
  ready() {
    //	this.getPosterPic();
  },
  observers: {
    isshow: function (isshow) {
      if (isshow && this.data.poster == "" && this.data.getFlag) {
        this.getPosterPic();
        this.data.getFlag = false;
      }
    },
  },
  /**
   * 组件的方法列表
   */
  methods: {
    loadImgError(err) {
      this.setData({
        errorFlag: true,
        errorMsg: err.detail.errMsg,
      });
    },
    // 隐藏二维码
    clicktapshow() {
      this.setData({
        isshow: false,
      });
      // wx.showTabBar({})
    },
    previewImage() {
      wx.showToast({
        title: "长按分享好友",
        icon: "none",
        duration: 1800,
      });
      wx.previewImage({
        urls: [this.data.poster], // 当前显示图片的链接
      });
    },
    async getPosterPic() {
      let posterSize = await this.getMyCanvasMessage(640, 1008);
      var urlStr = app.getNetAddresss("member.qrcode.get-poster");
      this.setData({
        canvasWidth: posterSize.width,
        canvasHeight: posterSize.height,
      });
      //this.startDrawCanvas(posterSize,{});
      app._getNetWork({
        showToastIn: false,
        url: urlStr,
        success: (resdata) => {
          let res = resdata.data;
          if (res.result != 1) {
            return;
          }
          if (res.data.center_show == 0) {
            this.setData({
              loading: 100,
              poster: res.data.image_url,
            });
          } else if (res.data.center_show == 1) {
            this.data.poster_id = resdata.data.data.id;
            this.startDrawCanvas(posterSize, resdata.data.data);
          } else if (res.data.center_show == 2) {
            this.getPosterTp2();
          }
        },
      });
    },
    getPosterTp2() {
      let that = this;
      let urlStr = app.getNetAddresss("member.poster");
      app._getNetWork({
        url: urlStr,
        success: (resdata) => {
          var res = resdata.data;
          if (res.result == 1) {
            if (res.data.image_url == "" || res.data.image_url == null) {
              wx.showToast({
                title: "请稍等" + res.data.image_url,
                icon: "none",
                duration: 2000,
              });
              setTimeout(() => {
                this.getPosterTp2();
              }, 500);
            } else if (res.data.image_url != "") {
              setTimeout(() => {
                that.setData({
                  poster: res.data.image_url,
                });
              }, 1000);
            }
          } else {
            wx.showToast({
              title: res.msg,
              icon: "none",
              duration: 1500,
            });
          }
        },
        fail: function (res) {
          if (this.data.timer) {
            clearInterval(this.data.timer);
          }
          wx.hideLoading({});
          console.log(res);
        },
      });
    },

    //工具
    //开始绘制
    async startDrawCanvas(posterSize, posterData) {
      const ctx = wx.createCanvasContext("myCanvas", this);
      //this.drawRoundRectPath(ctx,posterSize.width,posterSize.height,30);
      ctx.setFillStyle("#fff");
      ctx.fillRect(0, 0, posterSize.width, posterSize.height);
      //ctx.draw();

      //下载背景
      let bgImg = await this.readDownPicInfo(posterData.background);
      //绘制背景图片
      if (bgImg.height > bgImg.width) {
        let p = posterSize.height / posterSize.contentScale / bgImg.height;
        bgImg.height = bgImg.height * p;
        bgImg.width = bgImg.width * p;
      } else {
        let p = posterSize.width / posterSize.contentScale / bgImg.width;
        bgImg.width = bgImg.width * p;
        bgImg.height = bgImg.height * p;
      }
      this.drawCanvasImage(ctx, {
        left: 0,
        top: 0,
        width: bgImg.width / this.data.step,
        height: bgImg.height / this.data.step,
        img: bgImg.img,
        contentScale: posterSize.contentScale,
      });
      this.setData({ loading: 10 });

      //绘制其他内容
      let otherData = posterData.style_data;
      for (let i = 0; i < otherData.length; i++) {
        let item = otherData[i];
        //绘制昵称
        item.contentScale = posterSize.contentScale;
        console.log(item);
        if (item.type == "nickname") {
          this.drawCanvasText(ctx, item);
        } else if (item.type == "img" || item.type == "head") {
          // 代表后台有图片
          // //下载和读取图片
          let file = await this.readDownPicInfo(item.src);
          item.img = file.img;
          this.drawCanvasImage(ctx, item);
        } else if (item.type == "qr_shop" || item.type == "qr_app_share") {
          //需要自己将链接生成二维码
          let img = await this.getQRCodeUrl(item);
          item.img = img;
          this.drawCanvasImage(ctx, item);
        }
        console.log("loading", loading);
        let loading = parseInt((80 / otherData.length) * (i + 1));
        this.setData({ loading: loading + 10 });
      }
      console.log("执行完成");
      ctx.draw(
        false,
        setTimeout(async () => {
          let img = await this.toimage("myCanvas", posterSize);
          this.setData({
            loading: 100,
            poster: img,
          });
          this.upQrcodeImg(img);
        }, 1000)
      );
    },
    //绘制图片
    drawCanvasImage(ctx, imgInfo) {
      let step = this.data.step;
      ctx.drawImage(
        imgInfo.img,
        imgInfo.left * imgInfo.contentScale * step,
        imgInfo.top * imgInfo.contentScale * step,
        imgInfo.width * imgInfo.contentScale * step,
        imgInfo.height * imgInfo.contentScale * step
      ); // 推进去图片
    },
    //绘制文字
    drawCanvasText(ctx, textInfo) {
      let step = this.data.step;
      console.log(step);
      let size = textInfo.size * textInfo.contentScale;
      let top = textInfo.top * textInfo.contentScale + size;
      ctx.setFontSize(size * step);
      ctx.setFillStyle(textInfo.color);
      ctx.fillText(
        textInfo.src,
        textInfo.left * textInfo.contentScale * step,
        top * step
      );
      console.log("完成");
    },
    //导出图片
    toimage(canvasId, posterSize) {
      return new Promise((resolve, reject) => {
        console.log(canvasId, posterSize);
        wx.canvasToTempFilePath(
          {
            x: 0,
            y: 0,
            //	quality:1,
            width: posterSize.width,
            height: posterSize.height,
            destWidth: posterSize.width * 4,
            destHeight: posterSize.height * 4,
            canvasId: canvasId,
            success: (res) => {
              var tempFilePath = res.tempFilePath;
              resolve(tempFilePath);
            },
            fail: (res) => {
              wx.showToast({
                title: "图片导出失败" + res,
                icon: "success",
                duration: 2000,
              });
            },
          },
          this
        );
      });
    },
    drawRoundRectPath(ctx, width, height, radius) {
      ctx.beginPath(0);
      //从右下角顺时针绘制，弧度从0到1/2PI
      ctx.arc(width - radius, height - radius, radius, 0, Math.PI / 2);
      //矩形下边线
      ctx.lineTo(radius, height);
      //左下角圆弧，弧度从1/2PI到PI
      ctx.arc(radius, height - radius, radius, Math.PI / 2, Math.PI);
      //矩形左边线
      ctx.lineTo(0, radius);
      //左上角圆弧，弧度从PI到3/2PI
      ctx.arc(radius, radius, radius, Math.PI, (Math.PI * 3) / 2);
      //上边线
      ctx.lineTo(width - radius, 0);
      //右上角圆弧
      ctx.arc(width - radius, radius, radius, (Math.PI * 3) / 2, Math.PI * 2);
      //右边线
      ctx.lineTo(width, height - radius);
      ctx.closePath();
      ctx.clip();
    },
    //下载和读取图片
    readDownPicInfo(url) {
      return new Promise((resolve, reject) => {
        wx.downloadFile({
          url, //仅为示例，并非真实的资源
          success: (res) => {
            wx.getImageInfo({
              src: res.tempFilePath,
              success(res1) {
                //确保是一张图片
                resolve({
                  img: res.tempFilePath,
                  width: res1.width,
                  height: res1.height,
                });
              },
              fail: (err) => {
                this.data.getFlag = true;
                console.log("图片读取出错", err.errMsg);
                wx.showToast({
                  title: "图片读取出错" + err.errMsg,
                  icon: "success",
                  duration: 2000,
                });
              },
            });
          },
          fail: (res) => {
            this.data.getFlag = true;
            console.log("图片下载出错", res);
            wx.showToast({
              title: "图片下载出错" + res,
              icon: "none",
              duration: 2000,
            });
          },
        });
      });
    },
    // 获取海报画布宽高
    getMyCanvasMessage(w, h) {
      return new Promise((resolve, reject) => {
        wx.getSystemInfo({
          success: (res) => {
            let scale = h / w;
            let width = res.screenWidth - res.screenWidth * 0.2;
            let height = width * scale;
            let contentScale = width / w;
            (width = width * this.data.step),
            (height = height * this.data.step);
            resolve({
              width,
              height,
              contentScale,
            });
          },
          fail: (res) => {
            this.data.getFlag = true;
          },
        });
      });
    },
    getQRCodeUrl(item) {
      return new Promise((resolve, reject) => {
        let step = this.data.step;
        this.setData(
          {
            tempQRCodeCanvasWidth: item.width * item.contentScale * step,
            tempQRCodeCanvasHeight: item.height * item.contentScale * step,
          },
          async () => {
            drawQrcode({
              width: (item.width * item.contentScale - 10) * step,
              height: (item.height * item.contentScale - 10) * step,
              canvasId: "tempQRCode",
              background: "#fff",
              _this: this,
              x: 5 * step,
              y: 5 * step,
              text: item.src,
              callback: () => {
                setTimeout(async () => {
                  let img = await this.toimage("tempQRCode", {
                    width: item.width * item.contentScale * step,
                    height: item.height * item.contentScale * step,
                  });
                  resolve(img);
                }, 500);
              },
            });
          }
        );
      });
    },
    pxToNum(px) {
      let num = px.substring(0, px.length - 2);
      return parseInt(num);
    },
    upQrcodeImg(imgFile) {
      let urlStr = app.getNetAddresss("upload.uploadPic");
      console.log(imgFile);
      wx.uploadFile({
        url: urlStr,
        filePath: imgFile,
        name: "file",
        header: { "Content-Type": "multipart/form-data" },
        formData: {
          // 和服务器约定的token, 一般也可以放在header中
          _wx_token: wx.getStorageSync("wx_token"),
          ingress: 0,
        },
        success: (res) => {
          let data = JSON.parse(res.data);
          console.log("上传成功", data);
          if (data.result == 1) {
            //data.data.img_url
            console.log(data.data.img_url);
            this.addPosterRecord(data.data.img_url);
          }
        },
        fail: function (e) {
          console.log("上传失败一一一", e);
        },
      });
    },
    addPosterRecord(img_url) {
      var urlStr = app.getNetAddresss("member.qrcode.poster-record");
      console.log("开始写记录");
      app._getNetWork({
        showToastIn: false,
        url: urlStr,
        data: {
          image: img_url,
          poster_id: this.data.poster_id,
        },
        success: (resdata) => {},
      });
    },
    async checkWritePotosAlbum() {
      var _this = this;
      let writePhotosAlbum = await this.getAuthSetting(
        "scope.writePhotosAlbum"
      );
      if (!writePhotosAlbum) {
        wx.showModal({
          title: "请开启授权",
          content: "是否跳转设置页开启授权",
          success(res) {
            if (res.confirm) {
              wx.openSetting({
                success(settingdata) {
                  if (settingdata.authSetting["scope.writePhotosAlbum"]) {
                    _this.saveImg();
                  } else {
                    console.log("还是没授权");
                  }
                },
              });
            } else if (res.cancel) {
              console.log("用户点击取消");
            }
          },
        });
        return;
      }
      this.saveImg();
    },
    saveImg() {
      console.log("执行");
      var imgSrc = this.data.poster;
      wx.downloadFile({
        url: imgSrc,
        success: function (res) {
          wx.saveImageToPhotosAlbum({
            filePath: res.tempFilePath,
            success: (data) => {
              wx.showToast({
                title: "保存成功",
                icon: "none",
                duration: 2000,
              });
            },
            fail: function (err) {
              console.log(err);
            },
          });
        },
      });
    },
    getAuthSetting(authName) {
      return new Promise((resolve, reject) => {
        wx.getSetting({
          success(res) {
            if (!res.authSetting[authName]) {
              wx.authorize({
                scope: authName,
                success() {
                  resolve(true);
                },
                fail() {
                  resolve(false);
                },
              });
            } else resolve(true);
          },
          fail() {
            resolve(false);
          },
        });
      });
    },
  },
});
