<?php

namespace App\Admin\Controllers;

use App\Admin\Metrics\Examples\Tickets;
use App\Admin\Renderable\CreateUser;
use App\Admin\Renderable\UserDetail;
use App\Admin\Repositories\User;
use App\Admin\Repositories\UserAddress;
use App\Admin\Service\UserService;
use Dcat\Admin\Form;
use Dcat\Admin\Grid;
use Dcat\Admin\Http\Controllers\Dashboard;
use Dcat\Admin\Layout\Column;
use Dcat\Admin\Layout\Content;
use Dcat\Admin\Layout\Row;
use Dcat\Admin\Show;
use Dcat\Admin\Http\Controllers\AdminController;
use Illuminate\Support\Facades\Validator;
use Symfony\Component\HttpFoundation\Response;

class UserController extends AdminController
{
    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new User(), function (Grid $grid) {
            $grid->showFilter();
            $grid->disableFilterButton();
            $grid->disableRefreshButton();
            $grid->disableBatchDelete();
//            $grid->disableCreateButton();
            $grid->model()->orderBy("id", "desc");
            UserService::userListListField($grid);
            UserService::userListTool($grid);
            UserService::userListActions($grid);
            UserService::userListFilter($grid);
        });
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    protected function detail($id)
    {
        $address_list = (\App\Admin\Renderable\UserAddress::make(["key" => $id])->render());
        return UserDetail::make(["key" => $id])->render() . $address_list;
    }


    /**
     * Make a show builder.
     *
     * @param mixed $id
     *
     * @return Show
     */
    public function create(Content $content)
    {
        return $content->body(CreateUser::make()->render());
    }


    /**
     * Store a newly created resource in storage.
     *
     * @return mixed
     */
    public function store()
    {
        try {
            $data = request()->all();
            $params = [
                'company_name'       => $data['company_name'],
                'user_sn'            => $data['user_sn'],
                'first_name'         => $data['first_name'],
                'last_name'          => $data['last_name'],
                'phone'              => $data['phone'],
                'email'              => $data['email'],
                'account_properties' => $data['account_properties'],
                'remark'             => $data['remark'],
                'user_address_list'  => $data['user_address_list'] ?? [],
            ];

            $validator = Validator::make($params, [
                'company_name'       => 'required',
                'first_name'         => 'required',
                'last_name'          => 'required',
                'phone'              => 'required',
                'email'              => 'required',
                'account_properties' => 'required',
//                'user_address_list' => 'required',
//                'user_address_list.first_name'     => 'required',
//                'user_address_list.last_name'      => 'required',
//                'user_address_list.email'          => 'required',
//                'user_address_list.phone'          => 'required',
//                'user_address_list.country'        => 'required',
//                'user_address_list.city'           => 'required',
//                'user_address_list.post_code'      => 'required',
//                'user_address_list.detail_address' => 'required',
//                'user_address_list.is_default'     => 'required',
            ]);
            if ($validator->fails()) {
                $error = $validator->errors()->first();
                throw new \Exception($error);
            }
            UserService::createUserAndAddress($params);
        } catch (\Throwable $throwable) {
//            var_dump((string)$throwable);
            return Form::make()->response()
                    ->error(trans('admin.save_failed'))
                    ->withExceptionIf($throwable->getMessage(), $throwable);
        }
        $url = admin_url("/users");
        return Form::make()->response()->success(admin_trans("succeeded"))->redirect($url);
    }


}