const WXAPI = require('apifm-wxapi')
const AUTH = require('../../utils/auth')
var address_parse = require("../../utils/address_parse")
Page({
  data: {
    provinces: undefined,// 省份数据数组
    pIndex: 0,//选择的省下标
    cities: undefined,// 城市数据数组
    cIndex: 0,//选择的市下标
    areas: undefined,// 区县数数组
    aIndex: 0,//选择的区下标
  },
  async provinces(provinceId, cityId, districtId, streetId) {
    const res = await WXAPI.province()
    if (res.code == 0) {
      const provinces = [{
        id: 0,
        name: '请选择'
      }].concat(res.data)
      let pIndex = 0
      if (provinceId) {
        pIndex = provinces.findIndex(ele => {
          return ele.id == provinceId
        })
      }
      this.setData({
        pIndex,
        provinces: provinces
      })
      if (provinceId) {
        const e = { detail: { value: pIndex}}
        this.provinceChange(e, cityId, districtId, streetId)
      }
    }
  },
  async provinceChange(e, cityId, districtId, streetId) {
    const index = e.detail.value
    this.setData({
      pIndex: index
    })
    const pid = this.data.provinces[index].id
    if (pid == 0) {
      this.setData({
        cities: null,
        cIndex: 0,
        areas: null,
        aIndex: 0
      })
      return
    }
    const res = await WXAPI.nextRegion(pid);
    if (res.code == 0) {
      const cities = [{
        id: 0,
        name: '请选择'
      }].concat(res.data)
      let cIndex = 0
      if (cityId) {
        cIndex = cities.findIndex(ele => {
          return ele.id == cityId
        })
      }
      this.setData({
        cIndex,
        cities: cities
      })
      if (cityId) {
        const e = { detail: { value: cIndex } }
        this.cityChange(e, districtId, streetId)
      }
    }
  },
  async cityChange(e, districtId, streetId) {
    const index = e.detail.value
    this.setData({
      cIndex: index
    })
    const pid = this.data.cities[index].id
    if (pid == 0) {
      this.setData({
        areas: null,
        aIndex: 0
      })
      return
    }
    const res = await WXAPI.nextRegion(pid);
    if (res.code == 0) {
      const areas = [{
        id: 0,
        name: '请选择'
      }].concat(res.data)
      let aIndex = 0
      if (districtId) {
        aIndex = areas.findIndex(ele => {
          return ele.id == districtId
        })
      }
      this.setData({
        aIndex,
        areas: areas
      })
      if (districtId) {
        const e = { detail: { value: aIndex } }
        this.areaChange(e, streetId)
      }
    }
  },
  async areaChange(e, streetId) {
    const index = e.detail.value
    this.setData({
      aIndex: index
    })
    const shipping_address_region_level = wx.getStorageSync('shipping_address_region_level')
    if (shipping_address_region_level == 3) {
      return
    }
    //
    const pid = this.data.areas[index].id
    if (pid == 0) {
      this.setData({
        streets: null,
        sIndex: 0
      })
      return
    }
    const res = await WXAPI.nextRegion(pid);
    if (res.code == 0) {
      const streets = [{
        id: 0,
        name: '请选择'
      }].concat(res.data)
      let sIndex = 0
      if (streetId) {
        sIndex = streets.findIndex(ele => {
          return ele.id == streetId
        })
      }
      this.setData({
        sIndex,
        streets
      })
      if (streetId) {
        const e = { detail: { value: sIndex } }
        this.streetChange(e)
      }
    }
  },
  async streetChange(e) {
    const index = e.detail.value
    this.setData({
      sIndex: index
    })
  },
  async bindSave(e) {
    if (this.data.pIndex == 0 ) {
      wx.showToast({
        title: '请选择省份',
        icon: 'none'
      })
      return
    }
    if (this.data.cIndex == 0 ) {
      wx.showToast({
        title: '请选择城市',
        icon: 'none'
      })
      return
    }
    if (this.data.aIndex == 0 ) {
      wx.showToast({
        title: '请选择区县',
        icon: 'none'
      })
      return
    }
    const shipping_address_region_level = wx.getStorageSync('shipping_address_region_level')
    if (shipping_address_region_level == 4) {
      if (this.data.sIndex == 0 ) {
        wx.showToast({
          title: '请选择社区/街道',
          icon: 'none'
        })
        return
      }
    }
    
    const linkMan = e.detail.value.linkMan;
    const address = e.detail.value.address;
    const mobile = e.detail.value.mobile;
    if (this.data.shipping_address_gps == '1' && !this.data.addressData) {
      wx.showToast({
        title: '请选择定位',
        icon: 'none',       
      })
      return
    }
    const latitude = this.data.addressData ? this.data.addressData.latitude : null
    const longitude = this.data.addressData ? this.data.addressData.longitude : null
    if (linkMan == ""){
      wx.showToast({
        title: '请填写联系人姓名',
        icon: 'none'
      })
      return
    }
    if (mobile == ""){
      wx.showToast({
        title: '请填写手机号码',
        icon: 'none'
      })
      return
    }
    const postData = {
      token: wx.getStorageSync('token'),
      linkMan: linkMan,
      address: address,
      mobile: mobile,
      isDefault: 'true'
    }
    if (this.data.shipping_address_gps == '1' && !latitude){
      wx.showToast({
        title: '请选择定位',
        icon: 'none',       
      })
      return
    }
    if (latitude) {
      postData.latitude = latitude
    }
    if (longitude) {
      postData.longitude = longitude
    }
    if (address == ""){
      wx.showToast({
        title: '请填写详细地址',
        icon: 'none'
      })
      return
    }    
    
    if (this.data.pIndex > 0) {
      postData.provinceId = this.data.provinces[this.data.pIndex].id
    }
    if (this.data.cIndex > 0) {
      postData.cityId = this.data.cities[this.data.cIndex].id
    }
    if (this.data.aIndex > 0) {
      postData.districtId = this.data.areas[this.data.aIndex].id
    }    
    if (this.data.sIndex > 0) {
      postData.streetId = this.data.streets[this.data.sIndex].id
    }    
    let apiResult
    if (this.data.id) {
      postData.id = this.data.id
      apiResult = await WXAPI.updateAddress(postData)
    } else {
      apiResult = await WXAPI.addAddress(postData)
    }
    if (apiResult.code != 0) {
      // 登录错误 
      wx.hideLoading();
      wx.showToast({
        title: apiResult.msg,
        icon: 'none'
      })
      return;
    } else {
      wx.navigateBack()
    }
  },
  async onLoad(e) {
    // this.initFromClipboard('广州市天河区天河东路6号粤电广场北塔2302，徐小姐，18588998859')
    const _this = this
    if (e.id) { // 修改初始化数据库数据
      const res = await WXAPI.addressDetail(wx.getStorageSync('token'), e.id)
      if (res.code == 0) {
        this.setData({
          id: e.id,
          addressData: res.data.info
        })
        this.provinces(res.data.info.provinceId, res.data.info.cityId, res.data.info.districtId, res.data.info.streetId)
      } else {
        wx.showModal({
          title: '错误',
          content: '无法获取快递地址数据',
          showCancel: false
        })
      }
    } else {
      this.provinces()
      wx.getClipboardData({
        success (res){
          if (res.data) {
            _this.initFromClipboard(res.data)
          }
        }
      })
    }
    this.setData({
      shipping_address_gps: wx.getStorageSync('shipping_address_gps')
    })
  },
  async initFromClipboard (str) {
    address_parse.smart(str).then(res => {
      console.log('ggggggg', res);
      if (res.name && res.phone && res.address) {
        
        // 检测到收货地址
        this.setData({
          addressData: {
            provinceId: res.provinceCode,
            cityId: res.cityCode,
            districtId: res.countyCode,
            linkMan: res.name,
            mobile: res.phone,
            address: res.address,
          }
        })
        this.provinces(res.provinceCode, res.cityCode, res.countyCode)
      }
    })
  },
  deleteAddress: function (e) {
    const id = e.currentTarget.dataset.id;
    wx.showModal({
      title: '提示',
      content: '确定要删除该收货地址吗？',
      success: function (res) {
        if (res.confirm) {
          WXAPI.deleteAddress(wx.getStorageSync('token'), id).then(function () {
            wx.navigateBack({})
          })
        } else {
          console.log('用户点击取消')
        }
      }
    })
  },
  async readFromWx() {
    let that = this;
    wx.chooseAddress({
      success: function (res) {
        // res = {
        //   cityName: '上海市',
        //   countyName: '嘉定区',
        //   detailInfo: '惠民路123号',
        //   errMsg: 'chooseAddress.ok',
        //   nationalCode: '310114',
        //   postalCode: '201800',
        //   provinceName: '上海市',
        //   telNumber: '13500000000',
        //   userName: '测试',
        // }
        const provinceName = res.provinceName;
        const cityName = res.cityName;
        const diatrictName = res.countyName;
        // 读取省
        const pIndex = that.data.provinces.findIndex(ele => {
          return ele.name == provinceName
        })
        if (pIndex != -1) {
          const e = {
            detail: {
              value: pIndex
            }
          }
          that.provinceChange(e, 0, 0).then(() => {
            // 读取市
            let cIndex = that.data.cities.findIndex(ele => {
              return ele.name == cityName
            })
            if (cIndex == -1) {
              cIndex = 1 // 兼容直辖市
            }
            if (cIndex != -1) {
              const e = {
                detail: {
                  value: cIndex
                }
              }
              that.cityChange(e, 0).then(() => {
                // 读取区县
                const aIndex = that.data.areas.findIndex(ele => {
                  return ele.name == diatrictName
                })
                if (aIndex != -1) {
                  const e = {
                    detail: {
                      value: aIndex
                    }
                  }
                  that.areaChange(e)
                }
              })
            }
          })
        }
        const addressData = {}
        addressData.linkMan = res.userName
        addressData.mobile = res.telNumber
        addressData.address = res.detailInfo
        that.setData({
          addressData
        });
      }
    })
  },
  chooseLocation() {
    wx.chooseLocation({
      success: (res) => {
        const addressData = this.data.addressData ? this.data.addressData : {}
        addressData.address = res.address + res.name
        addressData.latitude = res.latitude
        addressData.longitude = res.longitude
        this.setData({
          addressData
        })
      },
      fail: (e) => {
        console.error(e)
      },
    })
  }
})
