<template>
  <view class="profile-container">
    <!-- 个人信息表单 -->
    <view class="form-container">
      <view class="form-title">个人信息</view>
      
      <!-- 昵称 -->
      <view class="form-item">
        <view class="label">
          <text class="required">*</text>
          <text>昵称</text>
        </view>
        <uv-input 
          v-model="userInfo.name" 
          placeholder="请输入昵称"
          type="nickname"
          :customStyle="inputStyle"
          border="bottom"
        ></uv-input>
      </view>
      
      <!-- 电话 -->
      <view class="form-item">
        <view class="label">
          <text class="required">*</text>
          <text>电话</text>
        </view>
        <uv-input 
          v-model="userInfo.phone" 
          placeholder="请输入手机号"
          :customStyle="inputStyle"
          border="bottom"
          type="number"
        ></uv-input>
      </view>
      
      <!-- 头像 -->
      <view class="form-item">
        <view class="label">
          <text class="required">*</text>
          <text>头像</text>
        </view>
        <!-- #ifdef MP-WEIXIN -->
        <button class="avatar-container" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
          <view 
            v-if="userInfo.avatar === 'undefined'"
            class="avatar-image"
          >
              <uv-icon name="camera" size="40" color="white"></uv-icon>
          </view>
          <image 
            v-else
            :src="userInfo.avatar || '/static/default-avatar.png'" 
            class="avatar-image"
            mode="aspectFill"
          ></image>

        </button>
        <!-- #endif -->

        <!-- #ifndef MP-WEIXIN -->
        <button class="avatar-container" @click="chooseImageH5">
          <view 
            v-if="userInfo.avatar === 'undefined'"
            class="avatar-image"
          >
              <uv-icon name="camera" size="40" color="white"></uv-icon>
          </view>
          <image 
            v-else
            :src="userInfo.avatar || '/static/default-avatar.png'" 
            class="avatar-image"
            mode="aspectFill"
          ></image>

        </button>
        <!-- #endif -->
      </view>
    </view>
    
    <!-- 固定底部保存按钮 -->
    <view class="save-button-container">
      <uv-button 
        @click="saveProfile"
        :customStyle="saveButtonStyle"
        shape="circle"
      >
        保存
      </uv-button>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      userInfo: {
        avatar: 'undefined',
        name: '', 
        phone: ''
      },
      saveButtonStyle: {
        backgroundColor: '#06DADC',
        borderRadius: '41rpx',
        height: '94rpx',
        width: '594rpx',
        border: 'none',
        color: '#fff',
        fontSize: '32rpx',
        fontWeight: '500'
      },
      inputStyle: {
        backgroundColor: '#fff',
        borderRadius: '12rpx',
        padding: '0 -20rpx',
        fontSize: '28rpx'
      }
    }
  },
  methods: {

    
    
    // 选择头像并上传到OSS
    async onChooseAvatar(e) {
      console.log('选择头像回调', e);
      if (e.detail.avatarUrl) {
        try {
          // 显示上传中提示
          uni.showLoading({ title: '上传头像中...' });
          
          // 构造文件对象
          const file = {
            path: e.detail.avatarUrl,
            tempFilePath: e.detail.avatarUrl
          };
          
          // 上传到OSS
          const uploadResult = await this.$utils.uploadImage(file);
          
          uni.hideLoading();
          
          if (uploadResult.success) {
            // 上传成功，更新头像URL
            this.userInfo.avatar = uploadResult.url;
            console.log('头像上传成功', uploadResult.url);
            uni.showToast({
              title: '头像上传成功',
              icon: 'success'
            });
          } else {

          }
        } catch (error) {
          uni.hideLoading();
          console.error('头像上传异常:', error);
          // 异常情况下使用本地头像
          // this.userInfo.avatar = e.detail.avatarUrl;
          uni.showToast({
            title: '头像处理异常，使用本地头像',
            icon: 'none'
          });
        }
      } else {
        uni.showToast({
          title: '头像选择失败',
          icon: 'none'
        });
      }
    },

    // 公众号/H5 选择图片并上传头像
    // #ifndef MP-WEIXIN
    async chooseImageH5() {
      try {
        const res = await uni.chooseImage({
          count: 1,
          sizeType: ['compressed'],
          sourceType: ['album', 'camera']
        })

        const filePath = (res.tempFilePaths && res.tempFilePaths[0])
          || (res.tempFiles && res.tempFiles[0] && (res.tempFiles[0].path || res.tempFiles[0].tempFilePath))

        if (!filePath) {
          uni.showToast({ title: '未选择图片', icon: 'none' })
          return
        }

        uni.showLoading({ title: '上传头像中...' })

        const file = { path: filePath, tempFilePath: filePath }
        const uploadResult = await this.$utils.uploadImage(file)

        uni.hideLoading()

        if (uploadResult && uploadResult.success) {
          this.userInfo.avatar = uploadResult.url
          uni.showToast({ title: '头像上传成功', icon: 'success' })
        } else {
          // 上传失败则先本地显示
          this.userInfo.avatar = filePath
          uni.showToast({ title: '头像已选择', icon: 'none' })
        }
      } catch (error) {
        uni.hideLoading()
        console.error('选择/上传头像异常:', error)
        uni.showToast({ title: '头像处理异常', icon: 'none' })
      }
    },
    // #endif
    
    // 保存资料
    async saveProfile() {
      if (!this.userInfo.name?.trim()) {
        uni.showToast({
          title: '请输入昵称',
          icon: 'none'
        })
        return
      }
      
      if (!this.userInfo.phone?.trim()) {
        uni.showToast({
          title: '请输入手机号',
          icon: 'none'
        })
        return
      }
      
      // 简单的手机号验证
      const phoneReg = /^1[3-9]\d{9}$/
      if (!phoneReg.test(this.userInfo.phone)) {
        uni.showToast({
          title: '请输入正确的手机号',
          icon: 'none'
        })
        return
      }
      
      // TODO: 调用API保存用户信息
      const res = await this.$api.login.updateUserInfo({
        avatar: this.userInfo.avatar,
        name: this.userInfo.name,
        phone: this.userInfo.phone
      })
      if (res.code === 200) {
        uni.showToast({
          title: '保存成功',
          icon: 'success'
        })
        
        // 延迟返回上一页
        setTimeout(() => {
          uni.navigateBack()
        }, 1500)
      } 
    },

    // 获取个人信息
    async getProfile() {
      const res = await this.$api.login.getUserInfo()
      if (res.code === 200) {
        this.userInfo = res.result
        this.$store.dispatch('updateUserInfo', this.userInfo)
      }
    }
  },
  onLoad() {
    this.getProfile()
    // 3秒后隐藏遮罩层

  }
}
</script>

<style lang="scss" scoped>
.profile-container {
  min-height: 100vh;
  background-color: #f5f5f5;
  padding: 40rpx 32rpx 200rpx;
  
  .form-container {
    background: #fff;
    border-radius: 20rpx;
    padding: 40rpx 32rpx;
    
    .form-title {
      font-size: 36rpx;
      font-weight: 600;
      color: #333;
      margin-bottom: 60rpx;
    }
    
    .form-item {
      margin-bottom: 60rpx;
      
      &:last-child {
        margin-bottom: 0;
      }
      
      .label {
        display: flex;
        align-items: center;
        margin-bottom: 20rpx;
        font-size: 28rpx;
        color: #333;
        
        .required {
          color: #ff4757;
          margin-right: 8rpx;
        }
      }
    }
    
    .avatar-container {
      position: relative;
      width: 200rpx;
      height: 200rpx;
      border-radius: 16rpx;
      overflow: hidden;
      display: block;
      text-align: left;
      margin: 0;
      padding: 0;
      background: none;
      border: none;
      
      .avatar-image {
        width: 100%;
        height: 100%;
        background: #00000080;
        display: flex;
        align-items: center;
        justify-content: center;
      }
      
      .avatar-mask {
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.6);
        display: flex;
        align-items: center;
        justify-content: center;
        color: #fff;
        font-size: 24rpx;
        transition: opacity 1s ease-out;
        
        &.fade-out {
          opacity: 0;
        }
      }
    }
  }
  
  .save-button-container {
    position: fixed;
    bottom: 60rpx;
    left: 50%;
    transform: translateX(-50%);
    z-index: 999;
  }
}
</style>
