<?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;

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') ?? 1;
            $grid->model()->where('wtype', $ptype)->orderBy("id", "desc");
            //$grid->column('id')->sortable();
            $grid->column('number');
            if ($ptype == 1) {
                $grid->column('company');
                $grid->column('tax_number');
                $grid->column('address');
                $grid->column('tel');
                $grid->column('bank_name');
                $grid->column('bank_account');
                $grid->column('contacts');
            } else {
                $grid->column('name');
                $grid->column('identity_card');
                $grid->column('address', '联系地址');
            }
            $grid->column('phone');
            // $grid->column('created_at');
            // $grid->column('updated_at')->sortable();
            $grid->disableViewButton();
            $grid->disableRowSelector();

            $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)->default(1);
            });
        });
    }

    /**
     * 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');
                    $form->text('tax_number');
                    $form->text('tel');
                    $form->text('bank_name');
                    $form->text('bank_account');
                    $form->text('contacts');
                })
                ->when(2, function (Form $form) {
                    $form->text('name');
                    $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');
        });

        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;;
    }
}