<?php

namespace App\Admin\Controllers;

use App\Admin\Actions\OrderAuditAction;
use App\Admin\Actions\OrderCancelAction;
use App\Admin\Actions\OrderEditSatusAction;
use App\Admin\Actions\OrderReverseAuditAction;
use App\Admin\Pages\OrderDetailPage;
use App\Models\Cms\CmsUser;
use App\Models\Order;
use App\Models\OrderPrice;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Widgets\Box;
use Dcat\Admin\Widgets\Dropdown;
use Illuminate\Support\Arr;


class OrderController extends AdminController
{


    /**
     * Index interface.
     *
     * @param  Content  $content
     * @return Content
     */
    public function index(Content $content)
    {
        return $content
            ->translation($this->translation())
            ->title($this->title())
            ->description($this->description()['index'] ?? trans('admin.list'))
            ->body($this->grid());


    }


    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Order(), function (Grid $grid) {
            $grid->model()->with("scmUser")->orderBy('order_id', 'desc');
            $grid->fixColumns(1,2);//固定列
//            $grid->showColumnSelector();//开启字段选择器功能
            // 在 display 回调中使用
            $grid->column('序号')->display(function () {
                return $this->_index + 1;
            });
            $grid->column('order_id',"ID");
            $grid->column('order_sn')->width('120px')->display(function () {
                return '<a  target="_blank" iframe-extends=true iframe-tab=true href="/admin/order/page?order_id='.$this->order_id.'" >'.$this->order_sn.'</a>';
            });
            $grid->column('status')->using(admin_trans('order.options.status'))->sortable();
            $grid->column('company_name')->display(function ($company_name) {
                return $company_name ? $company_name : "-";
            });
            $grid->column('scmUser.user_sn',admin_trans('scm-user.options.user_sn'))->link(function () {
                return admin_url('smc_user/'.$this->user_id);

            });
            $grid->column('scmUser.name',admin_trans('scm-user.options.name'));
            $grid->column('order_amount')->help('订单详情里-结算信息的“运费”“支付手续费”“其他费用”为空时;应付金额一栏为“待确认”');
            $grid->column('order_pay_type')->using(admin_trans('order.options.order_pay_type'))->sortable();
            $grid->column('fukuanfangshi',"付款方式")->display(function () {
                return "---不知道--";
            });
            $grid->column('sale_name');
            $grid->column('order_remark')->limit(10);
            $grid->column('update_time')->sortable()->display(function ($update_time) {
                return intval($update_time) > 0 ? date("Y-m-d H:i:s",intval($update_time)) : "-";
            });
            $grid->column('create_time')->sortable()->display(function ($create_time) {
                return intval($create_time) > 0 ? date("Y-m-d H:i:s",intval($create_time)) : "-";
            });





            $grid->showFilter();
            $grid->filter(function (Grid\Filter $filter) {
                $filter->expand(true);

                $filter->whereBetween('create_time', function ($q) {
                    $start = strtotime($this->input['start'] ?? null);
                    $end = strtotime($this->input['end'] ?? null);
                    $q->whereBetween('create_time', [$start, $end]);
                })->datetime()->width(3);
                $filter->whereBetween('update_time', function ($q) {
                    $start = strtotime($this->input['start'] ?? null);
                    $end = strtotime($this->input['end'] ?? null);
                    $q->whereBetween('update_time', [$start, $end]);
                })->datetime()->width(3);
                $filter->startWith('company_name')->width(3);
                $filter->startWith('scmUser.user_sn',admin_trans('scm-user.fields.user_sn'))->width(3);
                $filter->equal('status')->select([
                    "1"=>"待审核","2"=>"待付款","4"=>"待发货","8"=>"待收货","10"=>"交易成功","-1"=>"已取消"
                ])->width(3);
                $filter->equal('sales_id',trans('inquiry.fields.sales_name'))->select(CmsUser::pluck('name', 'userId')->where("status",0)->toArray())->width(3);

            });


            $grid->tools([
                new OrderAuditAction(),
                new OrderReverseAuditAction(),
                new OrderEditSatusAction(),
            ]);


            $grid->setActionClass(Grid\Displayers\Actions::class);
            $grid->actions(function (Grid\Displayers\Actions $actions) {
                $actions->disableDelete();
                $actions->disableEdit();
                $actions->disableQuickEdit();
                $actions->disableView();

                // 当前行的数据数组
                $rowArray = $actions->row->toArray();
                // 获取当前行主键值
                $id = $actions->getKey();
                //取消按钮
                if(in_array($rowArray["status"],[1,2])){
                    $actions->append(new OrderCancelAction());
                }


                //下载
                if($rowArray["status"] >= 2){
                    $options = [
                        'PI',
                    ];
                    if($rowArray["status"] > 2){
                        array_push($options,"CI","PL");
                    }
                    $actions->prepend(
                        \App\Admin\Controllers\OrderController::down($id,$options)
                    );
                }



            });





        });

    }

    public static function down($id,$optoins=[]){

        $menu1 =  Dropdown::make()
            ->button('下载')
            ->buttonClass('btn btn-primary btn-sm btn-mini') // 设置按钮样式
            ->options($optoins)->map(function ($v, $k) use($id) {
                $k++;
                return "<a style='min-width: 5rem' class='test_item' data-orderid='$id' data-id='$k', data-value='{$v}' data-test='Hello world.' href='javascript:void(0)'>$v</a>";
            });

        \Dcat\Admin\Admin::style(
            <<<style
.dropdown .dropdown-menu {min-width: 5rem;}
style

        );
        \Dcat\Admin\Admin::script(
            <<<JS
$('.test_item').click(function () {
        console.log($(this).data().id);
        window.location.href="/admin/api/order_download?type="+$(this).data().id+"&order_id="+$(this).data().orderid
});
JS
        );

        return $menu1;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Order(), function (Show $show) {
            $show->field('order_id');
            $show->field('order_sn');
            $show->field('order_remark');
            $show->field('company_name');
            $show->field('order_type');
            $show->field('order_source');
            $show->field('order_pay_type');
            $show->field('user_id');
            $show->field('order_amount');
            $show->field('advance_amount');
            $show->field('currency');
            $show->field('create_time');
            $show->field('sale_id');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Order(), function (Form $form) {
            $form->display('order_id');
            $form->text('order_sn');
            $form->text('order_remark');
            $form->text('company_name');
            $form->text('order_type');
            $form->text('order_source');
            $form->text('order_pay_type');
            $form->text('user_id');
            $form->text('order_amount');
            $form->text('advance_amount');
            $form->text('currency');
            $form->text('create_time');
            $form->text('sale_id');
        });
    }

    public function page(Content $content){
        $params = request()->all();
        $order_id = arrayGet($params,"order_id",0,"intval");

        $orderInfo = Order::getOneAndRelationList($order_id);
        $orderItems = $orderInfo["order_items"]??[];
        $info=[];
//        $info["orderInfo"] = $orderInfo;

        //基本信息
        $info["baseInfo"]["order_sn"] = $orderInfo["order_sn"];
        $info["baseInfo"]["status"] = $orderInfo["status"];
        $info["baseInfo"]["status_cn"] = Arr::get(array_flip(Order::$STATUS_FORAMT),$orderInfo["status"],"");
        $info["baseInfo"]["company_name"] = $orderInfo["company_name"];
        $info["baseInfo"]["user_sn"] = $orderInfo["scm_user"]["user_sn"]??"";
        $info["baseInfo"]["name"] = $orderInfo["scm_user"]["name"]??"";


        $info["receiveInfo"] = [];//收货信息
        $info["billingInfo"] = [];//账单信息

        $addressList = $orderInfo["order_address"]??[];
        foreach($addressList as $addressItem){
            if($addressItem["order_address_type"] == "1"){
                $info["receiveInfo"] = $addressItem;
            }elseif($addressItem["order_address_type"] == "2"){
                $info["billingInfo"] = $addressItem;
            }
        }



        $orderInfo["orderItemList"] = $orderItems;
        foreach($orderInfo["orderItemList"] as $k=>$item){
            $orderInfo["orderItemList"][$k]["goods_price_format"] = decimal_number_format_usd($item["goods_price"]);
            $orderInfo["orderItemList"][$k]["total_amount"] = decimal_number_format($item["goods_price"]*$item["goods_number"]);
            $orderInfo["orderItemList"][$k]["total_amount_format"] = decimal_number_format_usd($item["goods_price"]*$item["goods_number"]);
        }


        //结算信息
        $info["settlementInfo"]=[];
        $orderPrice = $orderInfo["order_price"]??[];
        $info["settlementInfo"]["order_amount"] = $orderInfo["order_amount"];
        $info["settlementInfo"]["order_amount_format"] = decimal_number_format_usd($orderInfo["order_amount"]);
        $info["settlementInfo"]["order_freight_amount"] = 0;//运费
        $info["settlementInfo"]["order_freight_amount_format"] = "";
        $info["settlementInfo"]["order_pay_commission_amount"] = 0;//手续费
        $info["settlementInfo"]["order_pay_commission_amount_format"] = "";
//        $orderItemsId = Arr::pluck($orderItems,"rec_id");

        foreach($orderPrice as $orderPriceItem){
            switch ($orderPriceItem["price_type"]){
                case OrderPrice::$PRICE_TYPE_LIST["运费"]:
                    $info["settlementInfo"]["order_freight_amount"] = $orderPriceItem["price"];
                    $info["settlementInfo"]["order_freight_amount_format"] = decimal_number_format_usd($orderPriceItem["price"]);
                case OrderPrice::$PRICE_TYPE_LIST["支付手续费"]:
                    $info["settlementInfo"]["order_pay_commission_amount"] = $orderPriceItem["price"];
                    $info["settlementInfo"]["order_pay_commission_amount_format"] = decimal_number_format_usd($orderPriceItem["price"]);
            }
        }
        $info["settlementInfo"]["order_total_amount"] = $info["settlementInfo"]["order_amount"] + $info["settlementInfo"]["order_freight_amount"]+$info["settlementInfo"]["order_pay_commission_amount"];
        $info["settlementInfo"]["order_total_amount_format"] = decimal_number_format_usd($info["settlementInfo"]["order_total_amount"]);





dump($info);

        return view('admin.pages.order-page',["info"=>$info]);

    }
}