<?php

namespace App\Admin\Controllers;

use App\Admin\Repositories\Lawyer;
use App\Models\Lawyer as ModelLawyer;
use App\Models\Covenant as ModelCovenant;
use App\Models\CovenantReceivePayment as ModelCovenantReceivePayment;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Show;
use Dcat\Admin\Admin;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Exports\LawyersExport;

class LawyerController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new Lawyer(), function (Grid $grid) {
            //$grid->column('id')->sortable();
            $grid->column('number');
            $grid->column('name');
            $grid->column('sex')->display(function ($val) {
                return $val == 1 ? '男' : '女';
            });
            $grid->column('identity_card');
            $grid->column('phone');
            $grid->column('bank_account');
            $grid->column('sign_at');
            $grid->column('commission_rate');
            $grid->column('settlement_period')->display(function ($val) {
                return $val == 1 ? '月' : '年';
            });
            $grid->column('ticket_ratio', '贴票比例(%)');
            $grid->column('settlement_method', '结算方式')->display(function ($val) {
                return $val == 1 ? '贴票' : '个税';
            });
            $grid->column('commission_retention', '提成留底');
            // $grid->column('created_at');
            // $grid->column('updated_at')->sortable();
            $grid->disableViewButton();
            $grid->disableRowSelector();
            //禁用增加按钮
            if (!Admin::user()->can('lawyer-add')) {
                $grid->disableCreateButton();
            }

            $grid->filter(function (Grid\Filter $filter) {
                // 更改为 panel 布局
                $filter->panel();
                $filter->like('name')->width(3);
                $filter->like('identity_card')->width(3);
                $filter->like('phone')->width(3);
                $filter->equal('settlement_period')->select(Lawyer::SETTLEMENT_PERIOD)->width(3);
                $filter->equal('settlement_method')->select(Lawyer::SETTLEMENT_METHOD)->width(3);
            });

            //添加导出按钮
            $grid->export()->rows(function ($rows) {
                foreach ($rows as $index => &$row) {
                    $row['sex'] = ($row['sex'] == 1) ? '男' : '女';
                    $row['settlement_period'] = ($row['settlement_period'] == 1) ? '月' : '年';
                    $row['settlement_method'] = ($row['settlement_method'] == 1) ? '贴票' : '个税';
                }
                return $rows;
            });

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

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        return Show::make($id, new Lawyer(), function (Show $show) {
            $show->field('id');
            $show->field('number');
            $show->field('name');
            $show->field('sex');
            $show->field('identity_card');
            $show->field('phone');
            $show->field('bank_account');
            $show->field('sign_at');
            $show->field('commission_rate');
            $show->field('settlement_period');
            $show->field('created_at');
            $show->field('updated_at');
        });
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = Form::make(new Lawyer(), function (Form $form) {
            $form->display('id');
            //$form->text('number');
            $form->text('name')->required();
            $form->select('sex')->options([1 => '男', 2 => '女'])->default(1)->required();
            $form->text('identity_card')->required();
            $form->text('phone')->required();
            $form->text('bank_account')->required();
            $form->date('sign_at')->format('YYYY-MM-DD')->required();
            $form->text('commission_rate');//提成比例,提了在更新代码
            $form->select('settlement_period')->options([1 => '月', 2 => '年'])->default(1)->required();
            $form->text('ticket_ratio', '贴票比例')->required();
            $form->select('settlement_method', '结算方式')->options([1 => '贴票', 2 => '个税'])->default(1)->required();
            $form->text('commission_retention', '提成留底');
            $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 = ModelLawyer::where('number', $rndnumber)->count();
            $flag = $rowObj ? 0 :  1;
        } while ($flag < 1);
        return $rndnumber;
    }

    public function destroy($id)
    {

        $res = $this->form()->destroy($id);
        if ($res) {
            //合同信息
            ModelCovenant::where('lawyer_id', $id)->delete();
            //收款开票信息
            ModelCovenantReceivePayment::where('lawyer_id', $id)->delete();
        }
        return $res;
    }

    public function getList(Request $request)
    {
        $name = $request->get('q');

        $where = [];
        if ($name) {
            $where['name'] = ['like', '%' . $name . '%'];
        }
        $data = [];
        $list = ModelLawyer::whereNull('deleted_at')->where($where)
            ->select(['id', 'number', 'name'])->limit(100)
            ->get()
            ->toArray();
        foreach ($list as $item) {
            $tmp = [];
            $tmp['id'] = $item['number'];
            $tmp['text'] = $item['number'] . ' ' . $item['name'];
            array_push($data, $tmp);
        }
        return $data;
    }

    /**
     * 导出律师数据
     *
     * @return \Symfony\Component\HttpFoundation\BinaryFileResponse
     */
    public function export()
    {
        return Excel::download(new LawyersExport(), 'lawyers.xlsx');
    }
}