<?php

namespace App\Store\Controllers;

use App\Models\UserAddress;
use App\Models\UserRefund;
use App\Store\Actions\Grid\RefundToExamine;
use App\Store\Actions\Grid\SendOutGoods;
use App\Models\StoreOrder;
use App\Models\OrderInfo;
use App\Models\City;
use App\Models\Store;
use App\Models\User;
use Dcat\Admin\Admin;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Widgets\Card;
use App\Admin\Renderable\OrderGoodsList;

class OrderInfoController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new OrderInfo(), function (Grid $grid) {
            $grid->addTableClass(['table-text-center']);
            $grid->model()->where(['merchant_id' => Admin::user()->id])->orderBy('created_at', 'DESC');
            $grid->column('id')->sortable();
            $grid->column('order_sn', '订单号');
            $grid->column('mobile', '手机号');
            $grid->column('goods', '商品信息')->expand(function (Grid\Displayers\Expand $expand) {
                $expand->button('查看');
                return OrderGoodsList::make(['order_id' => $this->id]);
            })->width(100);
            $grid->column('goods_amount', '订单总金额');
            $grid->column('merchant.name', '所属商家');
            $grid->column('merchant.province_id', '所在省市')->display(function ($val) {
                $proObj = City::where("city_id", $val)->first();
                $cityObj = City::where("city_id", $this->merchant->city_id)->first();
                $proname = $proObj->name ?? '';
                $cityname = $cityObj->name ?? '';
                return $proname . " " . $cityname;
            });
            $grid->column('store_id', '快递代收点')->display(function ($val) {
                $res = null;
                if ($val) {
                    $obj = Store::where('id', $val)->first();
                    $res = $obj->address;
                }
                return $res;
            });
            $grid->column('address_id', '送货上门')->display(function ($val) {
                $res = '';
                if ($val) {
                    $obj = UserAddress::where('id', $val)->first();
                    $res = $obj->area;
                }
                return $res;
            });
            $grid->column('created_at', '下单时间');
            $grid->column('order_status', '订单状态')->display(function ($val) {
                $options = OrderInfo::STATUS_OPTIONS;
                return $options[$val];
            });
            $grid->column('verifier', '核销员');
            $grid->column('verification_at', '核销时间');

            $grid->simplePaginate();
            $grid->disableActions();
            $grid->disableCreateButton();
            $grid->disableBatchActions();
            // $grid->simplePaginate();
            // $grid->disableFilterButton();
            // $grid->quickSearch('store_goods.title')->placeholder('搜索商品');
            $grid->filter(function (Grid\Filter $filter) {
                // 更改为 panel 布局
                $filter->panel();
                $filter->equal('order_sn', '订单号')->width(3);
                $filter->like('phone', '手机号')->width(3);
                $filter->between('created_at', '创建时间')->datetime()->width(4);
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new StoreOrder(), function (Show $show) {
            $show->field('id');
            $show->field('order_id');
            $show->field('goods_id');
            $show->field('num');
            $show->field('address_id');
            $show->field('status');
            $show->field('over_time');
            $show->field('voucher');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new StoreOrder(), function (Form $form) {
            $form->display('id');
            $form->text('order_id');
            $form->text('goods_id');
            $form->text('num');
            $form->text('address_id');
            $form->text('status');
            $form->text('over_time');
            $form->text('voucher');

            $form->display('created_at');
            $form->display('updated_at');
        });
    }
}