<?php

namespace App\Admin\Controllers;

use App\Admin\Renderable\OrderGoodsList;
use App\Models\OrderGoods;
use App\Models\OrderInfo;
use App\Models\City;
use App\Models\Store;
use App\Models\SystemCity;
use App\Models\UserAddress;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use App\Admin\Forms\VerifierCodeForm;

class OrderInfoController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(OrderInfo::with(['user', 'merchant']), function (Grid $grid) {
            $grid->model()->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];
            })->if(function ($column) {
                return $column->getValue() == 1;
            })->display('点击生成核销码')->modal(function (Grid\Displayers\Modal $modal) {
                // 标题
                $modal->title('生成核销码');
                // 自定义图标
                $modal->icon('feather icon-edit');
                // 传递当前行字段值
                return VerifierCodeForm::make()->payload(['id' => $this->id]);
            });
            $grid->column('verification_code', '核销码')->limit(10);
            $grid->column('verifier', '核销员');
            $grid->column('verification_at', '核销时间');
            //$grid->column('updated_at')->sortable();

            //$grid->disableActions();
            $grid->disableCreateButton();
            $grid->disableViewButton();
            $grid->filter(function (Grid\Filter $filter) {
                // 更改为 panel 布局
                $filter->panel();
                $filter->equal('order_sn', '订单号')->width(4);
                $filter->like('phone', '手机号')->width(4);
                $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 OrderInfo(), function (Show $show) {
            $show->field('id');
            $show->field('order_sn', '订单号');
            $show->field('verification_code', '核销码');
            // $show->field('order_status')->display(function ($val) {
            //     $options = OrderInfo::STATUS_OPTIONS;
            //     return $options[$val];
            // });
            $show->field('created_at', '下单时间');
            //$show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new OrderInfo(), function (Form $form) {
            //$form->display('id');
            $form->display('order_sn');
            $form->text('remark', '备注(后台用)');
            //订单状态 -1:全部 0:待付款 1:待到货 2:待领取 3: 待评价 4:已完成  7:已取消 8:已退款
            $options = [
                1 => '待到货',
                2 => '待领取',
                3 => '待评价',
                4 => '已完成',
                7 => '已取消',
            ];

            $form->select('order_status', '订单状态')->options($options);
            // $form->switch('pay_status')->default(0);
            // $form->switch('shipping_status', '发货状态')->default(0);
            // $form->datetime('shipping_time', '发货时间');
            // $form->text('shipping_name', '物流公司');
            // $form->text('shipping_code', '物流单号');
            // $form->text('order_amount', '订单应付款');
            // $form->display('created_at');
            // $form->display('updated_at');
            $form->disableEditingCheck();
            $form->disableViewCheck();
            $form->disableDeleteButton();
            $form->disableViewButton();
        });
    }
}