const app = getApp();
const api = require('../../../api/index.js');
 
// 全局常量定义
const PHONE_REG = /^1[3-9]\d{9}$/; // 手机号正则
const EMPTY_REGION_TIP = '请选择省/市/区'; // 地区空提示

Page({
  data: {
    formData: {
      receiver: '',
      phone: '',
      province: '',       // 省份名称（原生组件返回）
      city: '',           // 城市名称（原生组件返回）
      district: '',       // 区县名称（原生组件返回）
      provincecode: '',   // 省份编码（原生组件返回）
      citycode: '',       // 城市编码（原生组件返回）
      districtcode: '',   // 区县编码（原生组件返回）
      addressDetails: '',
      isDefault: false,
      poiName: '',
      latitude: '',
      longitude: '',
      addressId:''
    },
    regionValue: [],     // 原生选择器绑定值（['省', '市', '区']）
    customItem: EMPTY_REGION_TIP, // 选择器默认提示
    isSubmitting: false  // 防止重复提交
  },

  onLoad(options) {
    console.log(options);
    if (wx.getStorageSync("editAddress")) {
      const parsedAddress = wx.getStorageSync("editAddress") || {};
      console.log(parsedAddress);
      this.setData({
        formData:parsedAddress
      })
    }
  
    wx.removeStorageSync("editAddress"); // 用完立即删除
    // 初始化：优先使用定位获取当前地区（可选）
    this.getLocationRegion();
    // 支持编辑模式
    this.initEditMode(options);
  },
  onShow(){
 
  },
 
  /**
   * 初始化编辑模式（从地址列表传递数据）
   */
  initEditMode(options) {
    console.log(options);
    if (options.address) {
      try {
        const address = JSON.parse(decodeURIComponent(options.address));
        this.setData({
          formData: { ...this.data.formData, ...address },
          regionValue: [address.province, address.city, address.district]
        });
      } catch (err) {
        console.error('编辑地址数据解析失败：', err);
        wx.showToast({ title: '地址数据异常', icon: 'none' });
      }
    }
  },

  /**
   * 获取当前定位地区（优化初始体验）
   */
  getLocationRegion() {
    wx.getLocation({
      type: 'gcj02',
      success: (res) => {
        // 逆地理编码：通过经纬度获取省市区信息
        wx.request({
          url: `https://apis.map.qq.com/ws/geocoder/v1/?location=${res.latitude},${res.longitude}&key=VRGBZ-ZFRHB-SKIUP-NHHJ3-TXGJT-ZIFG3`,
          success: (geoRes) => {
            if (geoRes.data.status === 0) {
              const { province, city, district, adcode } = geoRes.data.result.ad_info;
              const regionValue = [province, city, district];
              this.setData({
                regionValue,
                'formData.province': province,
                'formData.city': city,
                'formData.district': district,
                'formData.provincecode': adcode.slice(0, 2) + '0000', // 省份编码（前2位+0000）
                'formData.citycode': adcode.slice(0, 4) + '00',     // 城市编码（前4位+00）
                'formData.districtcode': adcode,                   // 区县编码
                'formData.latitude': res.latitude,
                'formData.longitude': res.longitude
              });
            }
          }
        });
      },
      fail: () => {
        console.warn('获取定位失败，使用默认选择器');
        // 定位失败不影响，用户可手动选择
      }
    });
  },

  /**
   * 省市区选择器变更事件（完全原生实现）
   */
  handlePickerChange(e) {
    const { value, code } = e.detail; // 原生组件返回：value=名称数组，code=编码数组
    const [province, city, district] = value;
    const [provincecode, citycode, districtcode] = code;

    // 直接使用原生返回的名称和编码，无需自定义映射
    this.setData({
      regionValue: value,
      'formData.province': province,
      'formData.provincecode': provincecode,
      'formData.city': city,
      'formData.citycode': citycode,
      'formData.district': district,
      'formData.districtcode': districtcode
    });

    console.log('选中省市区：', {
      name: `${province}-${city}-${district}`,
      code: `${provincecode}-${citycode}-${districtcode}`
    });
  },

  /**
   * 输入框事件（保持原有限制）
   */
  handleInput(e) {
    const { key } = e.currentTarget.dataset;
    let { value } = e.detail;

    // 针对性输入限制
    switch (key) {
      case 'receiver':
        value = value.trim().slice(0, 10); // 收货人最多10个字
        break;
      case 'phone':
        value = value.replace(/\D/g, ''); // 只保留数字
        break;
      
      case 'addressDetails':
        value = value.trim().slice(0, 50); // 详细地址最多50个字
        break;
    }

    this.setData({
      [`formData.${key}`]: value
    });
  },
  /**
   * 开关切换事件
   */
  handleSwitchChange(e) {
    const isDefault = e.detail.value;
    this.setData({
      'formData.isDefault': isDefault
    });

    if (isDefault) {
      wx.showToast({
        title: '将设为默认收货地址',
        icon: 'none',
        duration: 1500
      });
    }
  },

  /**
   * 跳转地图选址
   */
  navigateToMapSelect() {
    const { formData } = this.data;
    console.log(formData);
    const params = {
      province: formData.province,
      city: formData.city,
      district: formData.district
    };

    wx.navigateTo({
      url: `/package-order/pages/mapSelect/index?params=${encodeURIComponent(JSON.stringify(params))}`
    });
  },

  /**
   * 表单提交（保持原有校验）
   */
  formSubmit(e) {
    const { formData, isSubmitting } = this.data;

    // 防止重复提交
    if (isSubmitting) return;
    console.log(formData);

    // 完整表单校验
    if (!formData.receiver.trim()) {
      wx.showToast({ title: '请输入收货人姓名', icon: 'none' });
      return;
    }

    if (!PHONE_REG.test(formData.phone)) {
      wx.showToast({ title: '请输入正确的手机号码', icon: 'none' });
      return;
    }

    if (!formData.province || !formData.city || !formData.district) {
      wx.showToast({ title: '请选择所在地区', icon: 'none' });
      return;
    }

    if (!formData.addressDetails.trim()) {
      wx.showToast({ title: '请输入详细地址', icon: 'none' });
      return;
    }
      if (formData.poiName=='') {
        formData.poiName = formData.addressDetails
        formData.addressDetails = formData.province+formData.city+formData.district+formData.addressDetails
      }
    // 开始提交
    this.setData({ isSubmitting: true });
    // 模拟接口请求（实际项目替换为真实接口）
    if (formData.addressId=='') {
      api.request(`/sysaddress/addaddress`, 'post',formData,{ isPublic: false })
      .then((data) => {
    console.log(data.data);
    if (data.code==200) {
    wx.navigateTo({
      url: '/package-order/pages/address/index',
    })
    this.setData({ isSubmitting: false });
  
    }
      })
      .catch((err) => {
        this.setData({ isSubmitting: false });
     
        console.error('请求失败：', err);
      });
    }else{
      api.request(`/sysaddress/updateaddress`, 'post',formData,{ isPublic: false })
      .then((data) => {
    console.log(data.data);
    if (data.code==200) {
    wx.navigateTo({
      url: '/package-order/pages/address/index',
    })
    this.setData({ isSubmitting: false });
  
    }
      })
      .catch((err) => {
        this.setData({ isSubmitting: false });
     
        console.error('请求失败：', err);
      });
    }
  
  }
});