<?php

namespace App\Admin\Controllers;

use App\Admin\Repositories\Principal;
use App\Models\Principal as ModelsPrincipal;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Dcat\Admin\Admin;
use Dcat\Admin\Widgets\Card;

class PrincipalController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Principal(), function (Grid $grid) {
            $ptype = $grid->model()->filter()->input('wtype') ?? 0;
            $where = $ptype ? ['wtype' => $ptype] : [];
            $grid->model()->where($where)->orderBy("id", "desc");
            //$grid->column('id')->sortable();
            $grid->column('number');
            $grid->column('wtype', '类型')->display(function ($val) {
                return $val == 1 ? '单位' : '个人';
            })->width(50);
            //if ($ptype == 1) {
            $grid->column('company');
            $grid->column('tax_number');
            $grid->column('address');
            $grid->column('tel');
            $grid->column('bank_name', '开户银行');
            $grid->column('bank_account')->width(90)->if(function ($column) {
                return $column->getValue();
            })->display('查看')->modal(function ($modal) {
                $modal->title('开户账号');

                $content = $this->bank_account;
                $card = new Card(null, $content);

                return "<div style='padding:10px 10px 0;width:100%;'>$card</div>";
            })->else(function ($column) {
                return '';
            });
            $grid->column('contacts')->width(90);
            //} else {
            $grid->column('name');
            //$grid->column('identity_card');
            $grid->column('identity_card')->width(90)->if(function ($column) {
                return $column->getValue();
            })->display('查看')->modal(function ($modal) {
                $modal->title('身份信息');

                $content = $this->identity_card;
                $card = new Card(null, $content);

                return "<div style='padding:10px 10px 0;width:100%;'>$card</div>";
            })->else(function ($column) {
                return '';
            });
            $grid->column('address', '联系地址');
            //}
            $grid->column('phone');
            // $grid->column('created_at');
            // $grid->column('updated_at')->sortable();
            $grid->disableViewButton();
            $grid->disableRowSelector();
            //禁用增加按钮
            if (!Admin::user()->can('principal-add')) {
                $grid->disableCreateButton();
            }

            $grid->filter(function (Grid\Filter $filter) use ($ptype) {
                // 更改为 panel 布局
                $filter->panel();
                $filter->like('company')->width(3);
                $filter->like('tax_number')->width(3);
                $filter->like('name')->width(3);
                $filter->like('identity_card')->width(3);
                $filter->equal('wtype', '类型')->select([1 => '单位', 2 => '个人'])->width(3);
            });

            $grid->actions(function (Grid\Displayers\Actions $actions) {
                //编辑
                if (!Admin::user()->can('principal-edit')) {
                    $actions->disableEdit();
                }
                //删除
                if (!Admin::user()->can('principal-delete')) {
                    $actions->disableDelete();
                }
            });
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Principal(), function (Show $show) {
            $show->field('id');
            $show->field('number');
            $show->field('company');
            $show->field('username');
            $show->field('identity_card');
            $show->field('tax_number');
            $show->field('address');
            $show->field('tel');
            $show->field('bank_name');
            $show->field('bank_account');
            $show->field('contacts');
            $show->field('phone');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = Form::make(new Principal(), function (Form $form) {
            $form->display('id');

            $form->radio('wtype', '类型')
                ->when(1, function (Form $form) {
                    $form->text('company')->setLabelClass(['asterisk']);
                    $form->text('tax_number')->setLabelClass(['asterisk']);
                    $form->text('tel');
                    $form->text('bank_name', '开户银行');
                    $form->text('bank_account');
                    $form->text('contacts');
                })
                ->when(2, function (Form $form) {
                    $form->text('name')->setLabelClass(['asterisk']);
                    $form->text('identity_card');
                })
                ->options([
                    1 => '单位',
                    2 => '个人',
                ])
                ->default(1);

            $form->text('address');
            $form->text('phone');

            $form->disableCreatingCheck();
            $form->disableEditingCheck();
            $form->disableViewCheck();
            $form->disableDeleteButton();
            $form->disableViewButton();

            $number = $form->number;
            $form->hidden('number');
            if (!$number) {
                $form->saving(function (Form $form) {
                    $form->number = self::getRandNumber();
                });
            }

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

        $form->submitted(function (Form $form) {
            $wtype = isset($_POST['wtype']) ? $_POST['wtype'] : 0;
            $company = isset($_POST['company']) ? $_POST['company'] : '';
            $tax_number = isset($_POST['tax_number']) ? $_POST['tax_number'] : '';
            $name = isset($_POST['name']) ? $_POST['name'] : ''; //姓名
            $identity_card = isset($_POST['identity_card']) ? $_POST['identity_card'] : '';
            if ($wtype == 1) {
                if (!$company) {
                    $form->responseValidationMessages('company', "单位全称不为空");
                }
                if (!$tax_number) {
                    $form->responseValidationMessages('tax_number', "税号不为空");
                }
            } elseif ($wtype == 2) {
                if (!$name) {
                    $form->responseValidationMessages('name', "姓名不为空");
                }
                // if (!$identity_card) {
                //     $form->responseValidationMessages('identity_card', "身份证号码不为空");
                // }
            }
        });

        // Admin::script(
        //     <<<JS
        //     $(function () {

        //         //社保
        //         $("input[name='wtype']").on('click', function() {
        //             var wtype =  $(this).val();
        //             console.log('-----'+wtype);
        //             if(wtype==1) {
        //                 $("input[name='company']").attr('required',1);
        //                 $("input[name='tax_number']").attr('required',1);
        //                 $("input[name='name']").removeAttr('required');
        //                 $("input[name='identity_card']").removeAttr('required');
        //             } else {
        //                 $("input[name='name']").attr('required',1);
        //                 $("input[name='identity_card']").attr('required',1);
        //                 $("input[name='company']").removeAttr('required');
        //                 $("input[name='tax_number']").removeAttr('required');
        //             }
        //         });
        //     });
        //     JS
        // );


        return $form;
    }

    //生成编号
    public static function getRandNumber()
    {
        $rndnumber = '';
        $flag = 0;
        do {
            $rndnumber = mt_rand(10000, 99999);
            $rowObj = ModelsPrincipal::where('number', $rndnumber)->count();
            $flag = $rowObj ? 0 :  1;
        } while ($flag < 1);
        return $rndnumber;
    }

    public function getList(Request $request)
    {
        $wtype = $request->get('q'); //委托人类型
        if ($wtype == 1) {
            $list = ModelsPrincipal::where('wtype', $wtype)->limit(1000)->get(['id', 'company as text']);
        } else {
            $list = ModelsPrincipal::where('wtype', $wtype)->limit(1000)->get(['id', 'name as text']);
        }

        return $list->toArray() ? $list : new \stdClass;;
    }
}