<!-- 售后申请 -->
<template>
  <s-layout :title="t('order.apply_for_after_sales')">
    <!-- 售后商品 -->
    <view class="goods-box">
      <s-goods-item
        :img="state.item.picUrl"
        :title="state.item.spuName"
        :skuText="state.item.properties?.map((property) => property.valueName).join(' ')"
        :price="state.item.price"
        :num="state.item.count"
      />
    </view>

    <uni-forms ref="form" v-model="formData" :rules="rules" label-position="top">
      <!-- 售后类型 -->
      <view class="refund-item">
        <view class="item-title ss-m-b-20">{{t('order.after_sales_type')}}</view>
        <view class="ss-flex-col">
          <radio-group @change="onRefundChange">
            <label
              class="ss-flex ss-col-center ss-p-y-10"
              v-for="(item, index) in state.wayList"
              :key="index"
            >
              <radio
                :checked="formData.type === item.value"
                color="var(--ui-BG-Main)"
                style="transform: scale(0.8)"
                :value="item.value"
              />
              <view class="item-value ss-m-l-8">{{ item.text }}</view>
            </label>
          </radio-group>
        </view>
      </view>
      <!-- 退款金额 -->
      <view class="refund-item ss-flex ss-col-center ss-row-between" @tap="state.showModal = true">
        <text class="item-title">{{t('order.refund_amount')}}</text>
        <view class="ss-flex refund-cause ss-col-center">
          <text class="ss-m-r-20">￥{{ fen2yuan(state.item.payPrice) }}</text>
        </view>
      </view>
      <!-- 申请原因 -->
      <view class="refund-item ss-flex ss-col-center ss-row-between" @tap="state.showModal = true">
        <text class="item-title">{{t('order.application_reason')}}</text>
        <view class="ss-flex refund-cause ss-col-center">
          <text class="ss-m-r-20" v-if="formData.applyReason">{{ formData.applyReason }}</text>
          <text class="ss-m-r-20" v-else>{{t('order.select_reason_for_application')}}</text>
          <text class="cicon-forward" style="height: 28rpx"></text>
        </view>
      </view>

      <!-- 留言 -->
      <view class="refund-item">
        <view class="item-title ss-m-b-20">{{t('order.related_description')}}</view>
        <view class="describe-box">
          <uni-easyinput
            :inputBorder="false"
            class="describe-content"
            type="textarea"
            maxlength="120"
            autoHeight
            v-model="formData.applyDescription"
            :placeholder="t('order.customer_prompt')"
          />
          <!-- TODO 非繁人：上传的测试 -->
          <view class="upload-img">
            <s-uploader
              v-model:url="formData.applyPicUrls"
              fileMediatype="image"
              limit="9"
              mode="grid"
              :imageStyles="{ width: '168rpx', height: '168rpx' }"
            />
          </view>
        </view>
      </view>
    </uni-forms>

    <!-- 底部按钮 -->
    <su-fixed bottom placeholder>
      <view class="foot-wrap">
        <view class="foot_box ss-flex ss-col-center ss-row-between ss-p-x-30">
          <!-- <button class="ss-reset-button contcat-btn" @tap="sheep.$router.go('/pages/chat/index')">
            联系客服
          </button> -->
          <button class="ss-reset-button ui-BG-Main-Gradient sub-btn" @tap="submit">{{t('common.submit')}}</button>
        </view>
      </view>
    </su-fixed>

    <!-- 申请原因弹窗 -->
    <su-popup :show="state.showModal" round="10" :showClose="true" @close="state.showModal = false">
      <view class="modal-box page_box">
        <view class="modal-head item-title head_box ss-flex ss-row-center ss-col-center">
          {{t('order.application_reason')}}
        </view>
        <view class="modal-content content_box">
          <radio-group @change="onChange">
            <label
              class="radio ss-flex ss-col-center"
              v-for="item in state.reasonList"
              :key="item"
            >
              <view class="ss-flex-1 ss-p-20">{{ item }}</view>
              <radio
                :value="item"
                color="var(--ui-BG-Main)"
                :checked="item === state.currentValue"
              />
            </label>
          </radio-group>
        </view>
        <view class="modal-foot foot_box ss-flex ss-row-center ss-col-center">
          <button class="ss-reset-button close-btn ui-BG-Main-Gradient" @tap="onReason">
            {{t('common.confirm')}}
          </button>
        </view>
      </view>
    </su-popup>
  </s-layout>
</template>

<script setup>
  import sheep from '@/sheep';
  import { onLoad } from '@dcloudio/uni-app';
  import { reactive, ref } from 'vue';
  import OrderApi from '@/sheep/api/trade/order';
  import TradeConfigApi from '@/sheep/api/trade/config';
  import { fen2yuan } from '@/sheep/hooks/useGoods';
  import AfterSaleApi from '@/sheep/api/trade/afterSale';
  import { t } from '@/locale'
  const form = ref(null);
  const state = reactive({
    orderId: 0, // 订单编号
    itemId: 0, // 订单项编号
    order: {}, // 订单
    item: {}, // 订单项
    config: {}, // 交易配置

    // 售后类型
    wayList: [
      // {
      //   text: t('order.refund_only')
      //   value: '10',
      // },
      {
        text: t('order.refund_and_return'),
        value: '20',
      },
    ],
    reasonList: [], // 可选的申请原因数组
    showModal: false, // 是否显示申请原因弹窗
    currentValue: '' // 当前选择的售后原因
  });
  const formData = reactive({
    way: '',
    applyReason: '',
    applyDescription: '',
    applyPicUrls: [],
  });
  const rules = reactive({});

  // 提交表单
  async function submit() {
    if(formData.way == ""){
	  	uni.showToast({
	  		title: t('order.select_after_sales_type'),
	  		icon: 'error',    
	  		duration: 1000   
	  	})  
	  	return false;
	  }
	  if(state.currentValue == ""){
	  	uni.showToast({
	  		title: t('order.reason_for_application'),
	  		icon: 'error',    
	  		duration: 1000    
	  	})  
	  	return false;
	  }
    if(formData.applyDescription == ""){
	  	uni.showToast({
	  		title:t('order.please_fill_in_description'),
	  		icon: 'error',    
	  		duration: 1000   
	  	})  
	  	return false;
	  }
	
	
	
    // #ifdef MP
    sheep.$platform.useProvider('wechat').subscribeMessage('order_aftersale_change');
    // #endif
    let data = {
      orderItemId: state.itemId,
      refundPrice: state.item.payPrice,
      ...formData,
    };
    const { code } = await AfterSaleApi.createAfterSale(data);
    if (code === 0) {
      uni.showToast({
        title: t('wallet.application_successful')
      });
      sheep.$router.go('/pages/order/aftersale/list');
    }
  }

  // 选择售后类型
  function onRefundChange(e) {
    formData.way = e.detail.value;
    // 清理理由
    state.reasonList =
      formData.way === '10'
        ? state.config.afterSaleRefundReasons || []
        : state.config.afterSaleReturnReasons || [];
    formData.applyReason = '';
    state.currentValue = '';
  }

  // 选择申请原因
  function onChange(e) {
    state.currentValue = e.detail.value;
  }

  // 确定
  function onReason() {
    formData.applyReason = state.currentValue;
    state.showModal = false;
  }

  onLoad(async (options) => {
    // 解析参数
    if (!options.orderId || !options.itemId) {
      sheep.$helper.toast(`缺少订单信息，请检查`);
      return;
    }
    state.orderId = options.orderId;
    state.itemId = parseInt(options.itemId);

    // 读取订单信息
    const { code, data } = await OrderApi.getOrder(state.orderId);
    if (code !== 0) {
      return;
    }
    state.order = data;
    state.item = data.items.find((item) => item.id === state.itemId) || {};

    // 设置选项
    if (state.order.status === 10) {
      state.wayList.splice(1, 1);
    }

    // 读取配置
    state.config = (await TradeConfigApi.getTradeConfig()).data;
	
	// 取消仅退款，所以一进入这个页面就默认选中售后退款
	formData.way = '20';
	formData.type = '20';
	state.reasonList = state.config.afterSaleReturnReasons || [];
  });
</script>

<style lang="scss" scoped>
  .item-title {
    font-size: 30rpx;
    font-weight: bold;
    color: rgba(51, 51, 51, 1);
    // margin-bottom: 20rpx;
  }

  // 售后项目
  .refund-item {
    background-color: #fff;
    border-bottom: 1rpx solid #f5f5f5;
    padding: 30rpx;

    &:last-child {
      border: none;
    }

    // 留言
    .describe-box {
      width: 690rpx;
      background: rgba(249, 250, 251, 1);
      padding: 30rpx;
      box-sizing: border-box;
      border-radius: 20rpx;

      .describe-content {
        height: 200rpx;
        font-size: 24rpx;
        font-weight: 400;
        color: #333;
      }
    }

    // 联系方式
    .input-box {
      height: 84rpx;
      background: rgba(249, 250, 251, 1);
      border-radius: 20rpx;
    }
  }

  .goods-box {
    background: #fff;
    padding: 20rpx;
    margin-bottom: 20rpx;
  }

  .foot-wrap {
    height: 100rpx;
    width: 100%;
  }

  .foot_box {
    height: 100rpx;
    background-color: #fff;

    .sub-btn {
      width: 100%;
      line-height: 74rpx;
      border-radius: 38rpx;
      color: rgba(#fff, 0.9);
      font-size: 28rpx;
    }

    .contcat-btn {
      width: 336rpx;
      line-height: 74rpx;
      background: rgba(238, 238, 238, 1);
      border-radius: 38rpx;
      font-size: 28rpx;
      font-weight: 400;
      color: rgba(51, 51, 51, 1);
    }
  }

  .modal-box {
    width: 750rpx;
    // height: 680rpx;
    border-radius: 30rpx 30rpx 0 0;
    background: #fff;

    .modal-head {
      height: 100rpx;
      font-size: 30rpx;
    }

    .modal-content {
      font-size: 28rpx;
    }

    .modal-foot {
      .close-btn {
        width: 710rpx;
        line-height: 80rpx;
        border-radius: 40rpx;
        color: rgba(#fff, 0.9);
      }
    }
  }

  .success-box {
    width: 600rpx;
    padding: 90rpx 0 64rpx 0;

    .cicon-check-round {
      font-size: 96rpx;
      color: #04b750;
    }

    .success-title {
      font-weight: 500;
      color: #333333;
      font-size: 32rpx;
    }

    .success-btn {
      width: 492rpx;
      height: 70rpx;
      background: linear-gradient(90deg, var(--ui-BG-Main-gradient), var(--ui-BG-Main));
      border-radius: 35rpx;
    }
  }
</style>
