<?php

namespace App\Admin\Controllers\Lottery;

use App\Admin\Extensions\Form\ValidateForm;
use App\Http\Controllers\Controller;
use App\Models\LotteryPrize;
use Encore\Admin\Facades\Admin as userAdmin;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;

class PrizeController extends Controller
{
    use HasResourceActions;

    /**
     * Index interface.
     *
     * @param Content $content
     * @return Content
     */
    public function index(Content $content)
    {
        return $content
            ->header('奖品列表')
            ->description('请确保总概率达到100%')
            ->body(view('admin.lottery.prize')->with(['grid'=>$this->grid()]));
    }

    /**
     * Edit interface.
     *
     * @param mixed $id
     * @param Content $content
     * @return Content
     */
    public function edit($id, Content $content)
    {
        return $content
            ->header('奖品设置')
            ->description(' ')
            ->body($this->editForm($id)->edit($id));
    }

    /**
     * Create interface.
     *
     * @param Content $content
     * @return Content
     */
    public function create(Content $content)
    {
        return $content
            ->header('奖品设置')
            ->description(' ')
            ->body($this->form());
    }

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new LotteryPrize);

        $grid->model();

        $grid->id('ID');
        $grid->column('prize_name','奖品名称');
        $grid->prize_image('奖品图片')->display(function () {
            if ($this->prize_image) {
                return '<span class="vtip" title="<img src=\'' . upload_asset($this->prize_image) . '\'  height=120>">
                            <img class="avatar small" src="' . upload_asset($this->prize_image) . '" align="absmiddle" style="width: 22px;height: 22px;">
                        </span>';
            } else {
                return '';
            }
        });
        $grid->prize_odds('中奖概率')->display(function () {
            return $this->prize_odds . '%';
        });
        $grid->prize_bg('奖品背景色')->display(function () {
            if ($this->prize_bg) {
                return '<div style="width: 22px;height: 22px;background-color:'.$this->prize_bg.'"></div>';
            } else {
                return '';
            }
        });
        $grid->column('prize_number','奖品数量');
        //新增按钮
        if (userAdmin::user()->can('prize_add')) {
            $grid->disableCreateButton(false);
        }
        //批量删除
        if (userAdmin::user()->can('prize_delete')) {
            $grid->tools(function ($tools) {
                $tools->batch(function ($batch) {
                    $batch->disableDelete(false);
                });
            });
        } else {
            $grid->disableRowSelector();
        }

        $grid->actions(function ($actions) {
            if (userAdmin::user()->can('prize_delete')) {
                $actions->disableEdit(false);
            }
            if (userAdmin::user()->can('prize_edit')) {
                $actions->disableDelete(false);
            }
        });

        return $grid;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new ValidateForm(new LotteryPrize());
        $form->text('prize_name', '奖品名称')->rules('required|max:100', ['required' => '奖品名称不能为空。', 'max' => '标题长度不能大于100。'])->setWidth(4)->setMustMark();
        $form->image('prize_image', '奖品图片')->uniqueName()->rules('image|mimes:jpeg,bmp,png', ['image' => '缩略图请选择图片文件。', 'mimes' => '请选择jpeg,bmp,png格式的缩略图上传。'])->setWidth(4);
        $form->number('prize_odds', '中奖概率(%)')->rules('required', ['required' => '中奖概率不能为空。'])->setWidth(4)->setMustMark();
        $form->color('prize_bg', '背景颜色')->rules('required|regex:/^#[a-fA-F0-9]{6}$/', ['required' => '标题颜色不能为空。', 'regex' => '标题颜色格式不正确。'])->default('#000000');
        $form->number('prize_number', '奖品数量')->rules('required', ['required' => '奖品数量不能为空。'])->setWidth(4)->setMustMark();

        $form->saved(function (Form $form) {
            //如果没有上传logo,判断是否
            $prize_image = \Illuminate\Support\Facades\Request::input('prize_image');
            if (!$form->model()->prize_image && $prize_image) {
                $form->model()->prize_image = $prize_image;
                $form->model()->save();
            }
        });

        $form->footer(function ($footer) {
            $footer->disableViewCheck();
            $footer->disableEditingCheck();
            $footer->disableCreatingCheck();
            $footer->disableReset();
        });
        return $form;
    }

    protected function editForm($id)
    {

        $form = new ValidateForm(new LotteryPrize);

        $form->text('prize_name', '奖品名称')->rules('required|max:100', ['required' => '奖品名称不能为空。', 'max' => '标题长度不能大于100。'])->setWidth(4)->setMustMark();
        $form->image('prize_image', '奖品图片')->uniqueName()->rules('image|mimes:jpeg,bmp,png', ['image' => '缩略图请选择图片文件。', 'mimes' => '请选择jpeg,bmp,png格式的缩略图上传。'])->setWidth(4);
        $form->number('prize_odds', '中奖概率(%)')->rules('required', ['required' => '中奖概率不能为空。'])->setWidth(4)->setMustMark();
        $form->color('prize_bg', '背景颜色')->rules('required|regex:/^#[a-fA-F0-9]{6}$/', ['required' => '标题颜色不能为空。', 'regex' => '标题颜色格式不正确。'])->default('#000000');
        $form->number('prize_number', '奖品数量')->rules('required', ['required' => '奖品数量不能为空。'])->setWidth(4)->setMustMark();

        $form->saved(function (Form $form) {
            //如果没有上传logo,判断是否
            $prize_image = \Illuminate\Support\Facades\Request::input('prize_image');
            if (!$form->model()->prize_image && $prize_image) {
                $form->model()->prize_image = $prize_image;
                $form->model()->save();
            }
        });

        $form->footer(function ($footer) {
            $footer->disableViewCheck();
            $footer->disableEditingCheck();
            $footer->disableCreatingCheck();
            $footer->disableReset();
        });
        $form->tools(function (Form\Tools $tools) {
            $tools->disableDelete();
            $tools->disableView();
        });
        return $form;
    }

    public function destroy($id)
    {
        //是否存在报名列表
        if ($this->form()->destroy($id)) {
            $data = [
                'status'  => true,
                'message' => trans('admin.delete_succeeded'),
            ];
        } else {
            $data = [
                'status'  => false,
                'message' => trans('admin.delete_failed'),
            ];
        }
        return response()->json($data);
    }
}