<?php

namespace App\Admin\Controllers\Company;

use App\Http\Controllers\Controller;
use App\Models\Setmeal;
use Encore\Admin\Auth\Permission;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Encore\Admin\Show;
use Illuminate\Support\Facades\Cache;
use Illuminate\Validation\Rule;

class SetmealController extends Controller
{
    use HasResourceActions;

    /**
     * Index interface.
     *
     * @param Content $content
     * @return Content
     */
    public function index(Content $content)
    {
        Permission::check('setmeal_manager_category');
        return $content
            ->header('套餐分类')
            ->description('列表')
            ->body($this->grid());
    }

    /**
     * Show interface.
     *
     * @param mixed $id
     * @param Content $content
     * @return Content
     */
    public function show($id, Content $content)
    {
        return $content
            ->header('会员套餐')
            ->description('详情')
            ->body($this->detail($id));
    }

    /**
     * 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()
    {
        Permission::check('setmeal_manager_category');
        $grid = new Grid(new Setmeal);
        $grid->id('ID');
        $grid->setmeal_name('名称');
        $grid->display('会员显示')->display(function ($display) {
            return $display==1?"显示":'不显示';
        });
        $grid->apply('允许申请')->display(function ($apply) {
            return $apply==1?"允许":'不允许';
        });
        $grid->expense('服务价')->display(function ($expense) {
            return $expense==0?"免费":$expense;
        });
        $grid->days('期限')->display(function ($days) {
            return $days==0?"不限制":$days;
        });
        if (Admin::user()->can('setmeal_manager_category_add')) {
            $grid->disableCreateButton(false);
        }
        $grid->show_order('排序');
        $grid->disableFilter();
        $grid->actions(function ($actions) {
            if (Admin::user()->can('setmeal_manager_category_edit')) {
                $actions->disableEdit(false);
            }
            if ($actions->row['id'] != 1) {
                if (Admin::user()->can('setmeal_manager_category_delete')) {
                    $actions->disableDelete(false);
                }
            }
        });
        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Setmeal::findOrFail($id));

        $show->setmeal_name('名称');
        $show->display('会员显示')->as(function ($display) {
            return $display==1?"显示":'不显示';
        });
        $show->apply('会员显示')->as(function ($apply) {
            return $apply==1?"允许":'不允许';
        });
        $show->expense('服务价')->as(function ($expense) {
            return $expense==0?"免费":$expense;
        });
        $show->days('期限')->as(function ($days) {
            return $days==0?"不限制":$days;
        });
        $show->jobs_meanwhile('职位最大并发数');
        $show->refresh_jobs_free('每天免费刷新职位次数');
        $show->download_resume('下载简历');
        $show->jobfair_num('招聘会场次');
        $show->download_resume_max('每天下载简历数上限');
        $show->discount_download_resume('下载简历增值包折扣');
        $show->discount_sms('短信增值包折扣');
        $show->discount_stick('职位置顶折扣');
        $show->discount_emergency('职位紧急折扣');
        $show->discount_tpl('企业模板折扣');
        $show->discount_auto_refresh_jobs('职位预约刷新折扣');
        $show->show_order('显示顺序');
        $show->set_sms('赠送短信条数');
        $show->set_points('赠送积分');
        $show->show_apply_contact('收到简历的联系方式免费查看');
        $show->apply('允许会员申请此服务');
        $show->setmeal_img('修改套餐图标(png格式)')->image();
        $show->added('其他说明)');

        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        Permission::check('setmeal_manager_category_add');
        $form = new Form(new Setmeal);
        $form->display('id');
        $form->text('setmeal_name', '套餐名称')->rules(['required','unique:setmeals'], ['required'=>'请填写套餐名称','unique' => '套餐名称已经存在']);
        $form->number('days', '有效时间')->min(0)->rules('required', ['required'=>'请填写有效时间']);
        $form->number('expense', '价格')->min(0)->rules('required', ['required'=>'请填写套餐价格']);
        $form->number('jobs_meanwhile', '职位最大发布数')->min(0)->rules('required', ['required'=>'请填写职位最大发布数']);
        $form->number('refresh_jobs_free', '每天免费刷新职位次数')->min(0)->rules('required', ['required'=>'请填写每天免费刷新职位数']);
        $form->number('download_resume', '下载简历')->min(0)->rules('required', ['required'=>'请填写下载简历数']);
        $form->number('jobfair_num', '招聘会场次')->min(0)->rules('required', ['required'=>'请填写招聘会场次']);
        $form->number('download_resume_max', '每天下载简历数上限')->min(0)->rules('required', ['required'=>'请填写每天下载简历数上限']);
        $form->number('discount_download_resume', '下载简历增值包折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写下载简历增值包折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_sms', '短信增值包折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写短信增值包折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_stick', '职位置顶折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写职位置顶折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_emergency', '职位紧急折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写职位紧急折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_tpl', '企业模板折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写企业模板折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_auto_refresh_jobs', '职位预约刷新折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写职位预约刷新折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('show_order', '显示顺序');
        $form->number('set_sms', '赠送短信条数')->rules('required', ['required'=>'请填写赠送短信条数']);
        $form->number('set_points', '赠送积分')->rules('required', ['required'=>'请填写赠送积分']);
        $form->switch('show_apply_contact', '收到简历的联系方式免费查看');
        $form->switch('apply', '允许会员申请此服务');
        $form->switch('display', '是否显示');
        $form->image('setmeal_img', '修改套餐图标(png格式)')->removable()->rules('required', ['required'=>'请上传图标'])->setMustMark();
        $form->text('added', '其他说明)');
        return $form;
    }

    protected function editform($id)
    {
        Permission::check('setmeal_manager_category_edit');
        $form = new Form(new Setmeal);
        $form->display('id');
        $form->text('setmeal_name', '套餐名称')->rules(['required',Rule::unique('setmeals')->ignore($id)], ['required'=>'请填写套餐名称','unique' => '套餐名称已经存在']);

        //2019.7.1 杨亚倩  更改免费也有到期时间
        $form->number('days', '有效时间')->min(0)->rules('required', ['required' => '请填写有效时间'])->help('0表示无限制');

        $form->number('expense', '价格')->min(0)->rules('required', ['required'=>'请填写套餐价格']);
        $form->number('jobs_meanwhile', '职位最大发布数')->min(0)->rules('required', ['required'=>'请填写职位最大发布数']);
        $form->number('refresh_jobs_free', '每天免费刷新职位次数')->min(0)->rules('required', ['required'=>'请填写每天免费刷新职位数']);
        $form->number('download_resume', '下载简历')->min(0)->rules('required', ['required'=>'请填写下载简历数']);
        $form->number('jobfair_num', '招聘会场次')->min(0)->rules('required', ['required'=>'请填写招聘会场次']);
        $form->number('download_resume_max', '每天下载简历数上限')->min(0)->rules('required', ['required'=>'请填写每天下载简历数上限']);
        $form->number('discount_download_resume', '下载简历增值包折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写下载简历增值包折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_sms', '短信增值包折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写短信增值包折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_stick', '职位置顶折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写职位置顶折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_emergency', '职位紧急折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写职位紧急折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_tpl', '企业模板折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写企业模板折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('discount_auto_refresh_jobs', '职位预约刷新折扣')->min(0)->max(9)->rules('required', ['required'=>'请填写职位预约刷新折扣'])->help('请填写0~9之间的数字,0表示无折扣');
        $form->number('show_order', '显示顺序');
        $form->number('set_sms', '赠送短信条数')->rules('required', ['required'=>'请填写赠送短信条数']);
        $form->number('set_points', '赠送积分')->rules('required', ['required'=>'请填写赠送积分']);
        $form->switch('show_apply_contact', '收到简历的联系方式免费查看');
        $form->switch('apply', '允许会员申请此服务');
        $form->switch('display', '是否显示');
        $form->image('setmeal_img', '修改套餐图标(png格式)')->removable()->rules('required', ['required'=>'请上传图标'])->setMustMark();
        $form->text('added', '其他说明)');

       
        $form->saved(function (){
            $redis = Cache::getRedis();
            $keys = $redis->keys("*aix_cache:setmeals*");

            foreach ($keys as $key) {
                $redis->del($key);
            }
        });
        return $form;
    }

    public function update($id)
    {
        if (request()->has(Form\Field::FILE_DELETE_FLAG)) {

            return $this->editForm($id)->update($id);
        }
        return $this->editform($id)->update($id);
    }
}