<?php

namespace App\Admin\Controllers\Content;

use App\Http\Controllers\Controller;
use App\Models\ComplaintConsultant;
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\Http\Request;
use Illuminate\Http\Response;

class ComplaintAdviserController extends Controller
{
    use HasResourceActions;
    
    /**
     * Index interface.
     *
     * @param Content $content
     * @return Content
     */
    public function index(Content $content)
    {
        return $content
            ->header('投诉顾问')
            ->description('列表')
            ->body(view('admin.content.complaint_adviser')->with(['gird'=>$this->grid()->render()]));
    }
    
    /**
     * 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->form()->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 ComplaintConsultant);
        $grid->model()->whereHas('consultant')->whereHas('company')->orderByRaw('status asc,created_at desc');

        $grid->column('consultant.name','被投诉顾问')->width(100);
        $grid->status('处理情况')->display(function ($status) {
            if($status==0){
                return '<span style="color:#FF6600">未处理</span>';
            }elseif ($status==1){
                return '属实';
            }else{
                return '不属实';
            }
        });
        $grid->notes('投诉内容')->display(function ($notes){
            return '<span title="'.$notes.'">'.$notes.'</span>';
        })->width(200);
        
        $grid->column('company.username','投诉者')->width(100);
        
        $grid->created_at('投诉时间');
        
        $grid->actions(function ($actions) {
            $actions->disableView();
            if (Admin::user()->can('company_consultant_complaint_adviser')) {
                $actions->append("<button class='btn btn-primary btn-xs jobaudit' data-code=".$actions->row['id'].">审核</button>");
            }
            if (Admin::user()->can('company_consultant_complaint_delete')) {
                $actions->disableDelete(false);
            }
        });
    
        $grid->tools(function ($tools) {
            if (Admin::user()->can('company_consultant_complaint_adviser')) {
                $but = <<<EOT
<div class="btn-group" data-toggle="buttons">
    <label class="btn btn-google btn-sm" id="audit_adviser" title="审核">
        <i class="fa fa-audio-description"></i>
        <input type="radio" class="user-gender">审核
    </label>
</div>
EOT;
                $tools->append($but);
            }
        });
        
        //批量删除
        if (Admin::user()->can('company_consultant_complaint_delete')) {
            $grid->tools(function ($tools) {
                $tools->batch(function ($batch) {
                    $batch->disableDelete(false);
                });
            });
        } else {
            $grid->disableRowSelector();
        }
    
        $grid->filter(function ($filter) {
            $filter->column(1/2, function ($filter) {
                $filter->like('consultant.name','被投诉顾问');
                $filter->equal('status', '处理情况')->select([
                    0=>'未处理',
                    1=>'属实',
                    2=>'不属实',
                ]);
            });
            $filter->column(1/2, function ($filter) {
                $filter->like('company.username', '投诉者');
                $filter->where(function ($query) {
                    switch ($this->input) {
                        case 3:
                            $query->whereRaw("created_at>='".date('Y-m-d H:i:s', strtotime('-3 day'))."'");
                            break;
                        case 7:
                            $query->whereRaw("created_at>='".date('Y-m-d H:i:s', strtotime('-7 day'))."'");
                            break;
                        case 30:
                            $query->whereRaw("created_at>='".date('Y-m-d H:i:s', strtotime('-30 day'))."'");
                            break;
                    }
                }, '投诉时间', 'created_at')->select([
                    3=>'三天内',
                    7=>'一周内',
                    30=>'一月内',
                ]);
            });
        });
        
        
        return $grid;
    }
    
    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(ComplaintConsultant::findOrFail($id));
        
        return $show;
    }
    
    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new ComplaintConsultant);
       
        return $form;
    }
    
    public function auditAdviser(Request $request)
    {
        $id = $request->id;
        $form = new \Encore\Admin\Widgets\Form();
        $form->action(route('admin.complaint.auditAdviserR'));
        $form->disableReset();
        $form->hidden('id', 'ID')->default($id);
        $form->radio('status', '处理情况')->options([1=>'属实',2=>'不属实'])->default(1);
        return json_encode(['html'=>$form->render(),'detail'=>'审核投诉']);
    }
    
    public function auditAdviserR(Request $request)
    {
        $id = $request->id;
        $status = $request->status;
        $arr = array_filter(explode(',', $id));
        if (empty($arr)) {
            admin_toastr('请选择投诉对象', 'error');
            return back();
        }
        $result = ComplaintConsultant::whereIn('id', $arr)->update(['status'=>$status]);
        if($result){
            admin_toastr('处理成功!', 'success');
        }else{
            admin_toastr('处理失败!', 'error');
        }
        return back();
    }
    
}