<?php

namespace App\Admin\Controllers\Company;

use App\Admin\Extensions\Form\ValidateForm;
use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Services\Common\OrderService;
use App\Services\Common\PayService;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Encore\Admin\Show;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

class OrderController extends Controller
{
    use HasResourceActions;

    /**
     * Index interface.
     *
     * @param Content $content
     * @return Content
     */
    public function index(Content $content)
    {
        $name = Route::currentRouteName();

        $arr = explode('.', $name);

        if ($arr[1] == 'company') {
            $type_id = 1;
        } else {
            $type_id = 2;
        }
        return $content
            ->header('订单管理')
            ->description('列表')
            ->body($this->grid($type_id));
    }

    /**
     * Show interface.
     *
     * @param mixed $id
     * @param Content $content
     * @return Content
     */
    public function show($id, Content $content)
    {
        return $content
            ->header('订单管理')
            ->description('详情')
            ->body($this->detail($id));
    }

    public function detail($id)
    {
        $show = new Show(Order::findOrFail($id));

        $show->oid('订单ID');
        $show->order_type('订单类型')->as(function ($order_type) {
            $arr = [
                1=>"套餐升级",
                2=>"充值积分",
                3=>"简历置顶",
                4=>"醒目标签",
                5=>"简历模板",
                6=>"简历包",
                7=>"短信包",
                8=>"职位置顶",
                9=>"职位紧急",
                10=>"企业模板",
                12=>"预约刷新职位",
                13=>"职位刷新",
                14=>"简历下载",
                15=>"职位包",
                16=>"招聘会包",
            ];
            return $arr[$order_type];
        });
        $show->pay_type('支付类型')->as(function ($pay_type) {
            switch ($pay_type) {
                case 1:
                    return '积分';
                    break;
                case 2:
                    return '现金';
                    break;
                case 3:
                    return '现金+积分';
                    break;
            }
        });
        $show->is_pay('支付状态')->as(function ($is_pay) {
            switch ($is_pay) {
                case 1:
                    return '待支付';
                    break;
                case 2:
                    return '已支付';
                    break;
                case 3:
                    return '已取消';
                    break;
            }
        });
        $show->amount('总金额');
        $show->pay_amount('现金支付金额');
        $show->pay_points('支付积分');
        $show->payment_cn('支付方式');
        $show->description('订单描述');
        $show->service_name('购买服务名称');
        $show->payment_time('支付时间')->as(function ($payment_time) {
            if ($payment_time) {
                return date('Y-m-d H:i:s', $payment_time);
            }
        });
        return $show;
    }

    /**
     * Edit interface.
     *
     * @param mixed $id
     * @param Content $content
     * @return Content
     */
    public function edit($id, Content $content)
    {
        $name = Route::currentRouteName();
        $arr = explode('.', $name);
        if ($arr[1] == 'company') {
            $type_id = 1;
        } else {
            $type_id = 2;
        }
        return $content
            ->header('订单管理')
            ->description('编辑')
            ->body($this->form($type_id)->edit($id));
    }

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid($type)
    {
        $grid = new Grid(new Order);
        $grid ->model()->where('utype', $type)
            /*->when(get_subsite_id()>0, function ($querys) use ($type) {
            if ($type ==1) {
                $relations = 'companys';
            } else {
                $relations = 'members';
            }
            $querys->whereHas($relations, function ($query) {
                $query->where('subsite_id', get_subsite_id());
            });
        })*/
            ->orderBy('created_at', 'desc')->orderBy("is_pay", 'asc');
        $grid->is_pay('支付状态')->display(function ($is_pay) {
            if ($is_pay == 1) {
                return '<span style="color: #FF3300">待付款</span>';
            } elseif ($is_pay == 2) {
                return '<span style="color: #009900">已付款</span>';
            } else {
                return '已取消';
            }
        });
        $grid->amount('金额')->width(150);
        if ($type == 1) {
            $grid->column('companys.companyname', '企业名称')->width(200);
        } else {
            $grid->column('members.username', '会员名称')->width(200);
        }

        $grid->service_name('说明')->width(150);
        if ($type == 1) {
            $grid->column('companys.username', '企业会员')->width(200);
        } else {
            $grid->column('members.username', '个人会员')->width(200);
        }
        $grid->oid('订单号')->width(200);
        $grid->created_at('申请时间');
        $grid->payment_cn('支付方式')->width(150)->display(function ($payment_cn) {
                 if ($payment_cn=="积分"){
                     return "积分支付";
                 } else{
                     return $payment_cn;
                 }
        });
        $grid->filter(function ($filter) use ($type) {
            $filter->column(1/2, function ($filter) use ($type) {
                $filter->equal('uid', '企业ID');
                if ($type == 1) {
                    $filter->like('companys.username', '会员名称');
                    $filter->like('companys.companyname', '企业名称');
                } else {
                    $filter->like('members.username', '会员名称');
                }

                $filter->equal('is_pay', '支付状态')->select([1=>'待付款',2=>'已付款',3=>'已取消']);
                $filter->equal('payment', '支付方式')->select(['offline'=>'线下转帐','alipay'=>'支付宝','wechat'=>'微信','points'=>"积分支付"]);
            });
            $filter->column(1/2, function ($filter) {
                $filter->like('oid', '订单号');
                $filter->equal('order_type', '订单类型')->select(
                    [
                        1=>'套餐升级',
                        2=>'充值积分',
                        3=>'简历置顶',
                        4=>'醒目标签',
                        5=>'简历模板',
                        6=>'简历包',
                        7=>'短信包',
                        8=>'职位置顶',
                        9=>'职位紧急',
                        10=>'企业模板',
                        11=>'职位刷新',
                        12=>'简历下载'
                    ]
                );
                $filter->between('created_at', '注册时间')->datetime();
            });
        });

        $grid->actions(function ($actions) use ($type) {
            if ($type == 1) {
                if (Admin::user()->can('order_manager_edit')) {
                    $actions->disableEdit(false);
                }
            } else {
                if (Admin::user()->can('person_order_edit')) {
                    $actions->disableEdit(false);
                }
            }
//            if ($type == 1) {
//                if (Admin::user()->can('order_manager_delete')) {
//                    $actions->disableDelete(false);
//                }
//            } else {
//                if (Admin::user()->can('person_order_delete')) {
//                    $actions->disableDelete(false);
//                }
//            }
        });
        return $grid;
    }


    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form($type)
    {
        $form = new ValidateForm(new Order);
        $form->display('id')->setWidth(2);
        if ($type == 1) {
            $form->display('companys.username', '企业会员')->setWidth(2);
        } else {
            $form->display('members.username', '个人会员')->setWidth(2);
        }

        $form->radio('is_pay', '支付状态')->options([1=>'待付款',2=>'已付款',3=>'已取消']);
        $form->display('amount', '订单金额')->setWidth(2);
        $form->display('pay_amount', '现金支付金额')->setWidth(2);
        $form->display('pay_points', '积分支付')->setWidth(2);
        $form->display('payment_cn', "支付方式")->setWidth(2);
        $form->display('created_at', '申请时间')->setWidth(2);
        $form->display('payment_time', '支付时间')->setWidth(2)->with(function ($payment_time) {
            if ($payment_time) {
                return date('Y-m-d H:i:s', $payment_time);
            }
        });
        $form->display('oid', '订单号')->setWidth(2);
        $form->display('service_name', '订单描述')->setWidth(8);
        $form->text('notes', '添加备注')->setWidth(8);
        return $form;
    }
    public function update(PayService $payService, Request $request, $id,OrderService $orderService)
    {
        $order = Order::where('id', $id)->first();
        if ($order->payment != "offline") {
            admin_error('只有线下转帐的订单可以修改支付状态!');
            return back();
        }
        if ($order->is_pay != 1) {
            admin_error('只有线下转帐且状态为未付款订单可以修改支付状态!');
            return back();
        }
        $data = $this->form($id)->getValidateInput();
        $up_data['is_pay'] = $data['is_pay'];
        if ($data['is_pay'] == 2) {
            $up_data['out_trade_no'] = $order->oid;
            $up_data['notes'] = $data['notes'];
            $up_data['admin_id'] = Admin::user()->id;
            $up_data['operate_time'] = date('Y-m-d H:i:s', time());

            if (!$payService->offlineHook($up_data)) {
                admin_toastr('订单修改失败', 'error');
            }
        }else{//加个已取消
            Order::where('id', $id)->update(['is_pay'=>3]);
        }

        admin_toastr('订单修改成功', 'success');
        return redirect(route('order.company.index'));
    }

}