<?php

namespace App\Store\Forms;

use App\Command\Log;

use App\Models\Pay;
use App\Models\PaymentRecord;
use App\Models\StoreGood;
use App\Models\StoreInfo;
use App\Models\StoreOrder;
use App\Models\UserRefund;
use Dcat\Admin\Widgets\Form;
use Dcat\Admin\Contracts\LazyRenderable;
use Dcat\Admin\Traits\LazyWidget;
use Illuminate\Support\Facades\DB;


class RefundToExamine extends Form implements LazyRenderable
{
    use LazyWidget;

    /**
     * Handle the form request.
     *
     * @param array $input
     *
     * @return mixed
     */
    public function handle(array $input)
    {
        $model = StoreOrder::find($this->payload['id']);
        DB::beginTransaction();
        try {
            $userRefund = UserRefund::where([
                'order_id'=>$model->order->id,
                'son_order_id'=>$model->id
            ])->first();
            if($input['refund_status']){
                if($model->order->status == 2){
                    $store = StoreInfo::find($model->store_id);
                    $store->total_revenue -= $model->order->pay_money;
                    $store->balance -= $model->order->pay_money;
                    $store->save();
                }
                $wxOrderSn = PaymentRecord::where(['order_id'=>$model->order_id])->first()->other_order;
                $r_sn = Pay::refund($wxOrderSn,$model->order->pay_money,$model->order->refund_amount);
                $userRefund->refund_no = $r_sn;
                $userRefund->status = 1;
                $userRefund->save();
                $model->status = 4;
                $model->save();
                $model->order->status = 8;
                $model->order->save();
                $goods = StoreGood::find($model->goods_id);
                $goods->sale_num -= $model->num;
                $goods->inventory += $model->num;
                $goods->save();
                Log::add('审批同意退款完成',$model->toArray());
                DB::commit();
            }else{
                $userRefund->status = 2;
                $userRefund->save();
                $model->status = $userRefund->son_order_status;
                $model->save();
            }
            DB::commit();
            Log::add('退款审批',$model->toArray());
        }catch (\Exception $exception){
            DB::rollBack();
            Log::add('退款审批失败',$exception);
            return $this->response()->error('退款审批失败')->refresh();
        }

        return $this->response()->success('退款审批成功')->refresh();
    }

    /**
     * Build a form here.
     */
    public function form()
    {
        $this->radio('refund_status','退款审批')->options([true=>'同意退款',false=>'拒绝退款'])->required();
    }

    /**
     * The data of the form.
     *
     * @return array
     */
    public function default()
    {
        // 获取外部传递参数
        return [];
    }
}