import {
  postApprove,
  getOcrKey
} from '../../services/index.js'
import {
  uploadImg
} from '../../services/uploadFile.js'
import {
  apiUrl
} from '../../config/config.js'
import { url } from '../../api/api'
import {
  imgServerUrl,
  imgServerUrl_new
} from '../../config/config.js'
import { isIDNum } from '../../utils/base'
var app = getApp()
const ocrSdk = require("../../ocrsdk/index");
const fs = wx.getFileSystemManager()
Page({
  data: {
    imgServerUrl: imgServerUrl,
    imgServerUrl_new: imgServerUrl_new,
    realName: '',
    idNum: '',
    nation: '',
    idFrontPic: '',
    idBackPic: '',
    idPersonPic: '',
    showMessage: false,
    showPass: false,
    message: '',
    canUpdate: false,
    from: '',
    tmpSecretId: '',
    tmpSecretKey: '',
    frontStatus: '',
    backStatus: ''
  },
  onLoad: function (options) {
    if (options.from) {
      this.setData({
        from: options.from
      })
    }
  },
  onShow: function () {
    getOcrKey().then(data => {
      this.setData({
        tmpSecretId: data.data.secretId,
        tmpSecretKey: data.data.secretKey,
      })
    })
  },
  changeShowMessage() {
    this.setData({
      showMessage: !this.data.showMessage
    })
  },
  changeShowPass() {
    this.setData({
      showPass: !this.data.showPass
    })
  },
  testCanUpdate() {
    let {
      realName,
      idNum,
      idFrontPic,
      idBackPic,
      // idPersonPic
    } = this.data;
    this.setData({
      canUpdate: false
    })
    if (realName == "") {
      return false;
    }
    if (!isIDNum(idNum)) {
      return false;
    }
    if (idFrontPic == "") {
      return false;
    }
    if (idBackPic == "") {
      return false;
    }
    this.setData({
      canUpdate: true
    })
    return true
  },
  callPhone() {
    wx.makePhoneCall({
      phoneNumber: '4006900099',
      success: () => {
        this.setData({
          showMessage: false
        })
      }
    })
  },
  async chooseImage(e) {
    let index = e.currentTarget.dataset.index
    const data = await this.ocrSdkStart(index)
    var up_type;
    switch (index) {
      case 1:
        up_type = '1';
        this.setData({
          idFrontPic: false
        }, _ => {
          fs.unlink({
            filePath: this.data.idFrontPic,
            complete: () => {
              const filePath = `${wx.env.USER_DATA_PATH}/identificationIdFrontPic${new Date().getTime()}.png`
              fs.writeFile({
                filePath,
                data: JSON.parse(data.AdvancedInfo).IdCard,
                encoding: 'base64',
                success: res => {
                  this.setData({
                    realName: data.Name,
                    idNum: data.IdNum,
                    nation: data.Nation,
                    idFrontPic: filePath
                  })
                  this.testCanUpdate()
                },
                fail: (res) => {
                  console.log(res)
                }
              })
            }
          })
        })
        break;
      case 2:
        up_type = '2';
        this.setData({
          idBackPic: false
        }, _ => {
          fs.unlink({
            filePath: this.data.idBackPic,
            complete: () => {
              const filePath = `${wx.env.USER_DATA_PATH}/identificationIdBackPic${new Date().getTime()}.png`
              fs.writeFile({
                filePath,
                data: JSON.parse(data.AdvancedInfo).IdCard,
                encoding: 'base64',
                success: res => {
                  this.setData({
                    idBackPic: filePath
                  })
                  this.testCanUpdate()
                },
                fail: (res) => {
                  console.log(res)
                }
              })
            }
          })
        })
        break;
      case 3:
        up_type = '3';
        break;
    }

    // uploadImg(up_type).then(res => {
    //   let image = res.data.imgUrl
    //   if (index == 1) {
    //     this.setData({
    //       idFrontPic: image
    //     }, _ => {
    //       this.testCanUpdate()
    //     })
    //   } else if (index == 2) {
    //     this.setData({
    //       idBackPic: image
    //     }, _ => {
    //       this.testCanUpdate()
    //     })
    //   } else if (index == 3) {
    //     this.setData({
    //       idPersonPic: image
    //     }, _ => {
    //       this.testCanUpdate()
    //     })
    //   }
    // })
  },
  changeName(e) {
    this.setData({
      realName: e.detail.value.trim()
    }, _ => {
      this.testCanUpdate()
    })
  },
  changeId(e) {
    this.setData({
      idNum: e.detail.value.trim()
    }, _ => {
      this.testCanUpdate()
    })
  },
  async submit(e) {
    this.testCanUpdate();
    let {
      realName,
      idNum,
      idFrontPic,
      idBackPic,
      nation,
      // idPersonPic
    } = this.data;
    if (realName == "") {
      wx.showToast({
        title: '请输入姓名',
        icon: 'none'
      })
      return false;
    }
    if (!isIDNum(idNum)) {
      wx.showToast({
        title: '请输入18位身份证号码',
        icon: 'none'
      })
      return false;
    }
    if (idFrontPic == "") {
      wx.showToast({
        title: '请上传身份证正面照',
        icon: 'none'
      })
      return false;
    }
    if (idBackPic == "") {
      wx.showToast({
        title: '请上传身份证反面照',
        icon: 'none'
      })
      return false;
    }
    // if (idPersonPic == "") {
    //   wx.showToast({
    //     title: '请上传手持身份证照片',
    //     icon: 'none'
    //   })
    //   return false;
    // }
    wx.showLoading({
      title: '正在创建...',
      mask: true
    })

    let paramsObj = {
      realName: realName,
      idCardNumber: idNum,
      idFrontPic: idFrontPic,
      idBackPic: idBackPic,
      nation: nation,
      // idPersonPic: idPersonPic,
      minaType: 1, //1：代表小程序
      user_id: app.globalData.userId,
      user_token: app.globalData.userToken,
      member_id: app.globalData.memberId
    }
    const idFrontPicPath = paramsObj.idFrontPic
    paramsObj.idFrontPic = await this.uploadFile(1, idFrontPicPath)
    fs.unlinkSync(idFrontPicPath)

    const idBackPicPath = paramsObj.idBackPic
    paramsObj.idBackPic = await this.uploadFile(2, idBackPicPath)
    fs.unlinkSync(idBackPicPath)

    wx.hideLoading()
    wx.showLoading({
      title: '正在提交...',
      mask: true
    })

    postApprove(paramsObj).then(data => {
      wx.hideLoading()
      wx.showToast({
        title: '提交成功',
      })
      if (this.data.from === 'clock') {
        wx.redirectTo({
          url: '../result/index?type=auth&status=2&from=clock',
        })
        // this.setData({
        //   showPass: true,
        //   message: '您的实名认证已通过'
        // })
        return
      }
      wx.redirectTo({
        url: '../result/index?type=auth&status=2',
      })
    }).catch(data => {
      wx.hideLoading()
      if (data.errcode === 2100) {
        this.setData({
          showMessage: true,
          message: '您的身份证已经被实名认证'
        })
        return
      }
      if (data.errcode === 2101) {
        this.setData({
          showMessage: true,
          message: '您已实名认证，无需重复认证'
        })
        return
      }
    })
    // 身份认证上报订阅信息
    wx.aldPushSubscribeMessage({
      eventId: '5ea25ae37739104342928e96'
    });
  },
  uploadFile(up_type, filePath) {
    return new Promise((reslove, reject) => {
      wx.uploadFile({
        url: apiUrl + url.imgUp,
        filePath,
        name: 'file',
        header: {},
        formData: {
          up_type,
          user_id: wx.getStorageSync("user_id"),
          user_token: wx.getStorageSync("user_token"),
          member_id: wx.getStorageSync("member_id")
        },
        success: (res) => {
          let data = JSON.parse(res.data)
          reslove(data.data.imgUrl)
        },
        fail: () => {
          reject()
        }
      })
    })
  },
  ocrSdkStart(type) {
    return new Promise((reslove, reject) => {
      ocrSdk.start({
        getAuthorization: () => {
          return new Promise((reslove, reject) => {
            reslove({
              tmpSecretId: this.data.tmpSecretId,
              tmpSecretKey: this.data.tmpSecretKey,
            })
          })
        },
        ocrType: type === 1 ? ocrSdk.OcrType.ID_CARD_FRONT : ocrSdk.OcrType.ID_CARD_BACK,
        ocrOption: {
          Config: {
            "CropIdCard": true,
            "CropPortrait": true,
          }
        },
        cameraConfig: {
          autoMode: false,
          maxTry: 3,
          disableAlbum: false
        },
        success: (res) => {
          reslove(res)
          if (type === 1) {
            this.setData({
              frontStatus: true
            })
          } else {
            this.setData({
              backStatus: true
            })
          }
          wx.navigateBack({
            delta: 1,
          })
        },
        fail: (error) => {
          reject(error)
          if (type === 1) {
            this.setData({
              frontStatus: false
            })
          } else {
            this.setData({
              backStatus: false
            })
          }
        }
      })
    })
  },
  onError(err) {
    app.aldstat.sendEvent('报错', {
      'err': err
    });
  },
})