<?php

namespace App\Admin\Actions;


use App\Admin\Service\OrderService;
use App\Exceptions\InvalidRequestException;
use App\Models\Order;
use App\Models\Order as OrderModel;
use Dcat\Admin\Grid\BatchAction;
use Dcat\Admin\Grid\Tools\AbstractTool;
use Illuminate\Http\Request;
use Dcat\Admin\Grid\RowAction;


class OrderCancelAction extends RowAction
{
    /**
     * 按钮样式定义,默认 btn btn-white waves-effect
     *
     * @var string
     */
    protected $style = 'btn btn-white waves-effect';


    /**
     * 按钮文本
     *
     * @return string|void
     */
    public function title()
    {
        return '取消';
    }

    public function html()
    {
        $class = $this->getElementClass();
        // 获取当前行数据ID
        $id = $this->getKey();

        // 获取当前行数据的用户名
        $username = $this->row;

        return '<a style="cursor: pointer;" class="'.$class. ' btn btn-primary btn-sm btn-mini" href="javascript:void(0)">取消</a>';
    }

    /**
     *  确认弹窗,如果不需要则返回空即可
     *
     * @return array|string|void
     */
    public function confirm()
    {
        // 只显示标题
//        return '您确定要发送新的提醒消息吗?';

        // 显示标题和内容
        return ['是否确认取消?'];
    }

    /**
     * 处理请求
     * 如果你的类中包含了此方法,则点击按钮后会自动向后端发起ajax请求,并且会通过此方法处理请求逻辑
     *
     * @param Request $request
     */
    public function handle(Request $request)
    {
        // 你的代码逻辑
        $id = $this->getKey();

        // 获取 parameters 方法传递的参数
        $rowData = $request->get('rowData');
        $orderInfo = Order::getOne($rowData["order_id"]??0);
        if(empty($orderInfo)){
            $this->response()->error('没找到相关的订单数据')->refresh();
        }
        try{
            OrderService::cancelOrder($rowData["order_id"]??0);
        }catch (InvalidRequestException $e){
            $this->response()->error($e->getMessage())->refresh();
        }
        return $this->response()->success('取消成功')->refresh();
    }






    /**
     * 设置请求参数
     *
     * @return array|void
     */
    public function parameters()
    {
        return [
            'rowData' => $this->row,
        ];
    }




}