<template>
  <div class="livedposterDia">
    <van-popup
      :show="showPosterDia"
      custom-style="width:100vw;height:100vh;background:transparent;"
      :close-on-click-overlay="true"
      @close="closeDia"
    >
      <div class="posterWrap" @click.stop="closeDia">
        <div class="canvas-wrap" >
          <canvas canvas-id="posterCanvas" class="myCanvas"></canvas>
          <div v-if="!posterStatus" class="masker">加载中...</div>
        </div>
        
        <div class="saveBtn" @click.stop="getImg">点击保存海报</div>
      </div>
    </van-popup>
  </div>
</template>

<script type="text/ecmascript-6">
import live from "@/api/live";
import { DFSImg } from '../../utils/common.js'
export default {
  props: ["showPosterDia", "posterInfo","userInfo","infoIsComplete"],
  name: "",
  data() {
    return {
      InfoSync: {},
      liveId: 0,
      params: {},
      // 海报中信息
      info: {
        posterCoverUrl: "",
        livedStatus: 1, //直播状态  0未开播 1一开播
        livedTime: "",
        livedTitle: "",
        nickName: "",
        avatarUrl: "",
        miniCode: ""
      },
      posterStatus : false,

      tempFilePath : '',
    };
  },
  components: {},
  computed: {},
  onLoad(options) {
    this.posterStatus = false;
    if(options.params){
      let params = JSON.parse(options.params);
      this.liveId = params.liveId;  
    }else if(options.scene){
      var scene = decodeURIComponent(options.scene); //参数二维码传递过来的参数
      console.log(scene)
      let sceneInfo = scene.split(',')
      console.log('sceneInfo',sceneInfo)
      this.liveId = sceneInfo[0].split('=')[1]
    }
    console.log(this.userInfo)
    Object.assign(this.info, this.info, this.posterInfo);
    console.log(this.info, "--------------------35");
    console.log(this.$store.state)
    this.init();
  },
  created() {},
  mounted() {},
  methods: {
    closeDia() {
      this.$emit("closePosterDia");
    },
    init() {
      wx.hideLoading();
      // wx.showLoading({
      //   title: "生成中..."
      // });
      this.$set(this.info,'avatarUrl',this.userInfo.headPortraitUrl)
      // this.info.avatarUrl = this.userInfo.headPortraitUrl
      let _this = this;
      if(this.infoIsComplete){
        wx.getUserInfo({
          //获取微信用户信息
          success: function(res) {
            (_this.info.nickName = res.userInfo.nickName),
              _this.initPoster(_this.info);
          },
          fail: function(res) {
            _this.initPoster(_this.info);
          }
        });
      }
      
    },
    initPoster(info) {
      console.log(info, "---------------------71");
      const InfoSync = wx.getSystemInfoSync();
      this.InfoSync = InfoSync;
      let bili = InfoSync.windowWidth / 375 * 1;
      // let bili = 1;
      const ctx = wx.createCanvasContext("posterCanvas");
      ctx.setFillStyle("#fff");
      ctx.fillRect(0, 0, 310 * bili, 520 * bili);

      console.log('info.posterCoverUrl',info.posterCoverUrl)

      //封面
      this.saveThe(info.posterCoverUrl, path => {
        console.log(this.info)
        console.log('0000000000000000000000封面')
        ctx.drawImage(path, 0, 0, 310 * bili, 370 * bili);
        ctx.save();
        // 微信昵称
        ctx.setTextAlign("left");
        ctx.setFillStyle("#3F2F00");
        ctx.setFontSize(15);
        ctx.fillText(info.nickName, 70 * bili, 410 * bili);

        ctx.setFillStyle("#FDC330");
        ctx.fillRect(0, 330 * bili, 310 * bili, 40 * bili);
   
        if(this.info.livedStatus == 0){
          console.log('直播时间',this.info.livedTime)
          this.saveThe('https://mayi-newshop.oss-cn-shanghai.aliyuncs.com/public/png/2a6cbdf0-91ca-4993-9ec5-963cb30ba9b8.png',path => {
            ctx.drawImage(path, 160 * bili , 340 * bili, 18 * bili, 18 * bili);
            ctx.save()
            ctx.setTextAlign("left");
            ctx.setFillStyle("#3F2F00");
            ctx.setFontSize(14);
            ctx.fillText(this.info.livedTime, 184 * bili , 355 * bili);

            this.saveThe('https://mayi-newshop.oss-cn-shanghai.aliyuncs.com/public/png/cc6db4d4-55bb-4add-a9ba-5733499aa5d0.png',path => {
              ctx.drawImage(path, 20 * bili , 340 * bili, 20 * bili, 18 * bili);
              ctx.save()
              ctx.setTextAlign("left");
              ctx.setFillStyle("#3F2F00");
              ctx.setFontSize(14);

              

              let liveText = '';
              if(this.info.livedStatus == 0){
                liveText = '直播预告'
              }else if(this.info.livedStatus == 1 || this.info.livedStatus == 3){
                liveText = '直播中'
              }else{
                liveText = '直播结束'
              }
              console.log('直播状态',liveText)
              ctx.fillText(liveText, 48 * bili , 355 * bili);   
              
              
              ctx.setTextAlign("left");
              ctx.setFillStyle("#3F2F00");
              ctx.setFontSize(14);
              ctx.fillText("邀你一起看直播", 10 * bili, 450 * bili);
              // 直播名
              ctx.setTextAlign("left");
              ctx.setFillStyle("#3F2F00");
              ctx.setFontSize(18);
              ctx.fillText(info.livedTitle, 10 * bili, 500 * bili);
              //圆形头像框
              ctx.setStrokeStyle("rgba(0,0,0,0)");
              ctx.arc(36 * bili, 400 * bili, 25 * bili, 0, 2 * Math.PI);
              ctx.fill();
              this.saveThe(info.qrCode, path => {
                ctx.drawImage(path, 200 * bili, 390 * bili, 100 * bili, 100 * bili);
                ctx.save();
                //头像
                ctx.clip();
                this.saveThe(info.avatarUrl,path => {
                  ctx.drawImage(path, 10 * bili, 370 * bili, 54 * bili, 54 * bili);
                  ctx.save();

                  ctx.stroke();
                  // ctx.draw(false,this.drawImageHanlder());
                  ctx.draw();
                
                  this.posterStatus = true;
                  console.log("--------海报生成成功");
                })
              });
              
            })
          })
        } else{
          this.saveThe('https://mayi-newshop.oss-cn-shanghai.aliyuncs.com/public/png/cc6db4d4-55bb-4add-a9ba-5733499aa5d0.png',path => {
            ctx.drawImage(path, 20 * bili , 340 * bili, 20 * bili, 18 * bili);
            ctx.save()
            ctx.setTextAlign("left");
            ctx.setFillStyle("#3F2F00");
            ctx.setFontSize(14);

            

            let liveText = '';
            if(this.info.livedStatus == 0){
              liveText = '直播预告'
            }else if(this.info.livedStatus == 1 || this.info.livedStatus == 3){
              liveText = '直播中'
            }else{
              liveText = '直播结束'
            }
            console.log('直播状态',liveText)
            ctx.fillText(liveText, 48 * bili , 355 * bili);   
            
            
            ctx.setTextAlign("left");
            ctx.setFillStyle("#3F2F00");
            ctx.setFontSize(14);
            ctx.fillText("邀你一起看直播", 10 * bili, 450 * bili);
            // 直播名
            ctx.setTextAlign("left");
            ctx.setFillStyle("#3F2F00");
            ctx.setFontSize(18);
            ctx.fillText(info.livedTitle, 10 * bili, 500 * bili);
            //圆形头像框
            ctx.setStrokeStyle("rgba(0,0,0,0)");
            ctx.arc(36 * bili, 400 * bili, 25 * bili, 0, 2 * Math.PI);
            ctx.fill();
            this.saveThe(info.qrCode, path => {
              ctx.drawImage(path, 200 * bili, 390 * bili, 100 * bili, 100 * bili);
              ctx.save();
              //头像
              ctx.clip();
              this.saveThe(info.avatarUrl,path => {
                ctx.drawImage(path, 10 * bili, 370 * bili, 54 * bili, 54 * bili);
                ctx.save();

                ctx.stroke();
                // ctx.draw(false,this.drawImageHanlder());
                ctx.draw();
              
                this.posterStatus = true;
                console.log("--------海报生成成功");
              })
            });
            
          })
        } 

        

        
      });
    },
    // 小程序需要将图片下载下来,然后才能绘制到画布上
    saveThe(url, callback) {
      wx.getImageInfo({
        src: url, //服务器返回的图片地址
        success: res => {
          callback(res.path);
        },
        fail: function(res) {
          console.log('saveTheFail ___________________________',url + '------url-----',res)
        }
      });
    },
    getImg() {
      if(this.posterStatus){
        let query = {
          liveBroadcastId: this.liveId,
          shareType: "HB"
        };
        live.addShareRecord(query).then();
        this.handleSave();
      }
    },
    // 点击保存时,将画布生成海报
    handleSave() {
      var that = this;

      wx.showLoading({
        title: "正在保存...",
        mask: true
      });
      
      wx.getSetting({
        success(res) {
          if (res.authSetting["scope.writePhotosAlbum"]) {
            that.saveImg();
          } else if (res.authSetting["scope.writePhotosAlbum"] === undefined) {
            wx.authorize({
              scope: "scope.writePhotosAlbum",
              success() {
                that.saveImg();
              },
              fail() {
                wx.hideLoading();
                wx.showToast({
                  title: "您没有授权,无法保存到相册",
                  icon: "none"
                });
              }
            });
          } else {
            wx.openSetting({
              success(res) {
                if (res.authSetting["scope.writePhotosAlbum"]) {
                  that.saveImg();
                } else {
                  wx.showToast({
                    title: "您没有授权,无法保存到相册",
                    icon: "none"
                  });
                }
              }
            });
          }
        },
        fail: err => {
          wx.hideLoading();
          wx.showToast({
            title: "出现了错误,请稍后再试11111",
            icon: "none"
          });
        }
      });
    },
    saveImg() {


      let _this = this;


      // 按照设备比例去计算图片和画布尺寸
      let bili = this.InfoSync.windowWidth / 375 * 1;
      wx.canvasToTempFilePath({
        x: 0,
        y: 0,
        width: 310 * bili,
        height: 520 * bili,
        destWidth: 310 * bili * this.InfoSync.pixelRatio,
        destHeight: 520 * bili * this.InfoSync.pixelRatio,
        fileType: "png",
        quality: 1,
        canvasId: "posterCanvas",
        success: function(res) {
          wx.hideLoading();
          var tempFilePath = res.tempFilePath;
          // 需要权限
          wx.saveImageToPhotosAlbum({
            filePath: tempFilePath,
            success(res) {
              _this.$emit("closePosterDia");
              wx.showModal({
                content: "图片已保存到相册,赶紧晒一下吧~",
                showCancel: false,
                confirmText: "好的",
                confirmColor: "#333"
              });
            },
            fail: function(res) {
              wx.hideLoading();
              wx.showToast({
                title: "没有相册权限",
                icon: "none",
                duration: 2000
              });
            }
          });
        },
        fail: err => {

          console.log(err,'保存相册出错');
          wx.hideLoading();
          wx.showToast({
            title: "出现了错误,请稍后再试2222",
            icon: "none"
          });
        }
      });
    },
    // 发送给朋友,以图片的方式,先生成临时图片地址,然后调用微信api显示转发
    handleShowImg() {
      let bili = this.InfoSync.windowWidth / 375 * 1;
      wx.canvasToTempFilePath({
        x: 0,
        y: 0,
        width: 310 * bili,
        height: 520 * bili,
        destWidth: 310 * bili * this.InfoSync.pixelRatio,
        destHeight: 520 * bili * this.InfoSync.pixelRatio,
        fileType: "png",
        quality: 1,
        canvasId: "posterCanvas",
        success: function(res) {
          wx.hideLoading();
          wx.previewImage({
            urls: [res.tempFilePath],
            current: res.tempFilePath
          });
        },
        fail: err => {
          wx.hideLoading();
          wx.showToast({
            title: "出现了错误,请稍后再试",
            icon: "none"
          });
        }
      });
    }
  }
};
</script>

<style lang="scss" scoped>
.livedposterDia {
  .posterWrap {
    min-height: calc(100vh - 80px);
    padding-top: 80px;
    // background-color: #f1f1f1;
    .canvas-wrap{
      width: 310px;
      height: 520px;
      margin: 0 auto;
      background: #fff;
      position: relative;
      overflow: hidden;
      border-radius: 5px;
      .myCanvas {
        width: 100%;
        height: 100%;
        background: #fff;
      }
      .masker{
        width: 100%;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;
        background-color: white;
        text-align: center;
        line-height: 520px;
        font-size: 16px;
        color: #666;
      }
    }
    
    .saveBtn {
      margin: 0 auto;
      margin-top: 20px;
      background: #f82f31;
      width: 50vw;
      height: 40px;
      border-radius: 40px;
      text-align: center;
      line-height: 40px;
      color: #fff;
    }
  }
}
</style>