<template>
  <view class="container" :style="appThemeStyle">
    <!-- 智能识别 -->
    <view class="form-analysis form-wrapper">
      <u-form-item prop="name" :border-bottom="false">
        <u-input v-model="form.content" type="textarea" placeholder="粘贴地址信息,自动解析姓名、电话和地址" :custom-style="{ height: '150rpx' }"
          :auto-height="false" />
      </u-form-item>
      <view class="analysis-foot clearfix">
        <view class="analysis-btn" @click="handleAnalysis()">智能识别</view>
      </view>
    </view>
    <!-- 标题 -->
    <view class="page-title">收货地址</view>
    <!-- 表单组件 -->
    <view class="form-wrapper">
      <u-form :model="form" ref="uForm" label-width="140rpx">
        <u-form-item label="姓名" prop="name">
          <u-input v-model="form.name" placeholder="请输入收货人姓名" />
        </u-form-item>
        <u-form-item label="电话" prop="phone">
          <u-input v-model="form.phone" placeholder="请输入收货人手机号" />
        </u-form-item>
        <u-form-item label="地区" prop="region">
          <select-region ref="sRegion" v-model="form.region" />
        </u-form-item>
        <u-form-item label="详细地址" prop="detail" :border-bottom="false">
          <u-input v-model="form.detail" placeholder="街道门牌、楼层等信息" />
        </u-form-item>
      </u-form>
    </view>
    <!-- 操作按钮 -->
    <view class="footer">
      <view class="btn-wrapper">
        <!-- #ifdef MP-WEIXIN -->
        <view class="btn-item btn-item-wechat" @click="chooseAddress()">选择微信收货地址</view>
        <!-- #endif -->
        <view class="btn-item btn-item-main" :class="{ disabled }" @click="handleSubmit()">保存</view>
      </view>
    </view>
  </view>
</template>

<script>
  import SelectRegion from '@/components/select-region/select-region'
  import { isMobile } from '@/utils/verify'
  import * as AddressApi from '@/api/address'

  // 表单验证规则
  const rules = {
    name: [{
      required: true,
      message: '请输入姓名',
      trigger: ['blur', 'change']
    }],
    phone: [{
      required: true,
      message: '请输入手机号',
      trigger: ['blur', 'change']
    }, {
      // 自定义验证函数
      validator: (rule, value, callback) => {
        // 返回true表示校验通过,返回false表示不通过
        return isMobile(value)
      },
      message: '手机号码不正确',
      // 触发器可以同时用blur和change
      trigger: ['blur'],
    }],
    region: [{
      required: true,
      message: '请选择省市区',
      trigger: ['blur', 'change'],
      type: 'array'
    }],
    detail: [{
      required: true,
      message: '请输入详细地址',
      trigger: ['blur', 'change']
    }],
  }

  export default {
    components: {
      SelectRegion
    },
    data() {
      return {
        form: {
          content: '',
          name: '',
          phone: '',
          region: [],
          detail: ''
        },
        rules,
        // 加载中
        isLoading: true,
        // 按钮禁用
        disabled: false,
        // 当前收货地址ID
        addressId: null
      }
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad({ addressId }) {
      // 当前收货地址ID
      this.addressId = addressId
      // 获取当前记录详情
      this.getDetail()
    },

    // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
    onReady() {
      this.$refs.uForm.setRules(this.rules)
    },

    methods: {

      // 获取当前记录详情
      getDetail() {
        const app = this
        AddressApi.detail(app.addressId)
          .then(result => {
            const detail = result.data.detail
            app.createFormData(detail)
          })
      },

      // 收货地址智能解析
      handleAnalysis() {
        const app = this
        AddressApi.analysis(app.form.content)
          .then(result => {
            const detail = result.data.detail
            app.createFormData(detail)
          })
      },

      // 选择微信地址
      // #ifdef MP-WEIXIN
      chooseAddress() {
        const { form, $refs } = this
        uni.chooseAddress({
          success(res) {
            const names = $refs.sRegion.getOptionItemByNames(res)
            form.name = res.userName
            form.phone = res.telNumber
            form.detail = res.detailInfo
            form.region = names.length > 0 ? names : []
          },
          fail({ errMsg }) {
            app.$toast(errMsg)
            console.error('获取微信地址失败:', errMsg)
          }
        })
      },
      // #endif

      // 生成默认的表单数据
      createFormData(detail) {
        const { form } = this
        form.name = detail.name
        form.phone = detail.phone
        form.detail = detail.detail
        form.region = this.createRegion(detail)
      },

      // 格式化地区数据 (用于select-region组件)
      createRegion(detail) {
        if (detail.province_id == 0 || detail.city_id == 0 || detail.region_id == 0) {
          this.$toast('很抱歉,地区未能识别请手动选择', 2000)
          return []
        }
        return [{
          label: detail.region.province,
          value: detail.province_id
        }, {
          label: detail.region.city,
          value: detail.city_id
        }, {
          label: detail.region.region,
          value: detail.region_id
        }]
      },

      // 表单提交
      handleSubmit() {
        const app = this
        if (app.disabled) {
          return false
        }
        app.$refs.uForm.validate(valid => {
          if (valid) {
            app.disabled = true
            AddressApi.edit(app.addressId, app.form)
              .then(result => {
                app.$toast(result.message)
                uni.navigateBack()
              })
              .finally(() => app.disabled = false)
          }
        })
      }

    }
  }
</script>

<style>
  page {
    background: #f7f8fa;
  }
</style>
<style lang="scss" scoped>
  .page-title {
    width: 94%;
    margin: 0 auto;
    padding-top: 40rpx;
    font-size: 28rpx;
    color: rgba(69, 90, 100, 0.6);
  }

  .form-wrapper {
    margin: 20rpx auto 20rpx auto;
    padding: 0 40rpx;
    width: 94%;
    box-shadow: 0 1rpx 5rpx 0px rgba(0, 0, 0, 0.05);
    border-radius: 16rpx;
    background: #fff;
  }

  .form-analysis {

    .analysis-foot {
      padding-bottom: 20rpx;

      .analysis-btn {
        float: right;
        background: linear-gradient(to right, $main-bg, $main-bg2);
        color: $main-text;
        border-radius: 30rpx;
        padding: 10rpx 30rpx;
        font-size: 26rpx;
      }
    }
  }

  // 底部操作栏
  .footer {
    margin-top: 80rpx;

    .btn-wrapper {
      height: 100%;
      // display: flex;
      // align-items: center;
      padding: 0 20rpx;
    }

    .btn-item {
      flex: 1;
      font-size: 28rpx;
      height: 86rpx;
      color: #fff;
      border-radius: 50rpx;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .btn-item-wechat {
      background: #0ba90b;
      margin-bottom: 26rpx;
    }

    .btn-item-main {
      background: linear-gradient(to right, $main-bg, $main-bg2);
      color: $main-text;

      // 禁用按钮
      &.disabled {
        opacity: 0.6;
      }
    }

  }
</style>