<?php
namespace App\Admin\Controllers;
use App\ChannelLevel;
use App\Company;
use App\Facades\CommonFacade;
use App\Facades\MessageFacade;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Layout\Content;
use Encore\Admin\Show;
use App\User;
use Encore\Admin\Widgets\Box;
use Encore\Admin\Widgets\Form as WForm;
use function GuzzleHttp\default_ca_bundle;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Encore\Admin\Facades\Admin;
use Illuminate\Support\MessageBag;
class ManageChannelController extends Controller
{
    use HasResourceActions;
    
    public function index(Content $content)
    {
        return $content
            ->header('渠道商')
            ->description('管理')
            ->body($this->grid())
            ->body(view('modal/recharge'));
    }
    
    public function show($id, Content $content)
    {
        return $content
            ->header('渠道商')
            ->description('详情')
            ->body($this->detail($id));
    }
    
    public function edit($id, Content $content)
    {
        return $content
            ->header('编辑')
            ->description('渠道商')
            ->body($this->form()->edit($id));
    }
    
    public function create(Content $content)
    {
        return $content
            ->header('创建')
            ->description('渠道商')
            ->body($this->form());
    }
    
    protected function grid()
    {
        $grid = new Grid(new Company);
        $grid->model()->where('type', 1);
        $grid->logo('logo')->image('',30,30);
        $grid->user()->credit('余额')->display(function ($credit) {
            $url = url('admin/recharge?id='.$this->admin_user_id);
            return $credit . "<a href='#' class='recharge-modal-item' data-url='$url'>充值</a>";
        });
        $grid->name('名称');
        $grid->channel_level()->name('等级')->label();
        $grid->user()->name('管理员')->label();
        $grid->service_user()->name('顾问')->label();
        $grid->address('地址');
        $grid->mail('邮箱');
        $grid->contact_phone('联系电话');
        $grid->registration_number('注册号');
        $grid->registration_amount('注册资金');
        $grid->created_at('创建时间');
        return $grid;
    }
    
    protected function detail($id)
    {
        $show = new Show(Company::findOrFail($id));
        $show->type('类型');
        $show->name('名称');
        $show->logo('logo')->image();
        $show->address('地址');
        $show->mail('邮箱');
        $show->contact_name('联系人');
        $show->contact_phone('联系电话');
        $show->registration_number('注册号');
        $show->registration_amount('注册资金');
        $show->user('管理员', function ($user){
            $user->setResource('admin/user');
            $user->name('姓名');
        });
        $show->channel_id('所属渠道商');
        $show->created_at('创建日期');
        $show->updated_at('更新日期');
        return $show;
    }
    
    protected function form()
    {
        $form = new Form(new Company);
        $form->select('channel_level_id', '等级')->options(ChannelLevel::all()->pluck('name', 'id'))->rules('required');
        $form->text('name', '名称')->rules('required');
        $form->image('logo', 'logo');
        $form->text('address', '地址')->rules('required');
        $form->email('mail', '邮箱')->rules('required');
        $form->text('contact_name', '联系人')->rules('required');
        $form->mobile('contact_phone', '联系电话')->options(['mask' => '99999999999'])->rules('required');
        $form->text('registration_number', '注册号')->rules('required');
        $form->text('registration_amount', '注册资金')->rules('required');
        $users = User::whereHas('roles', function($query) {
            $query->where('slug', 'ChannelService');
        })->get();
        $options = [];
        foreach ($users as $user) {
            $options[$user->id] = $user->name;
        }
        $form->select('service_user_id', '渠道顾问')->options($options);
        $form->saving(function (Form $form)  {
            if ($form->model()->id !== null) {
                if( $form->model()->channel_id != CommonFacade::getCompanyId()) {
                    $error = new MessageBag([
                        'title'   => '错误',
                        'message' => '该客户不属于您!',
                    ]);
                    return back()->with(compact('error'));
                }
            }
        });
               $form->saved(function (Form $form) {
            if (empty($form->model()->admin_user_id)) {                $user = new User();
                $user->username = $form->contact_phone;
                $user->name = $form->contact_name;
                $user->password = bcrypt($form->contact_phone);
                $user->avatar = $form->model()->logo;
                $user->company_id = $form->model()->id;
                $user->save();
                Db::table('admin_role_users')->insert(['role_id' => 4, 'user_id' => $user->id]);
                $form->model()->admin_user_id = $user->id;
                $form->model()->type =1;
                $form->model()->save();
            }
            DB::table('admin_users')->where('company_id', $form->model()->id)->update(['service_user_id'=> $form->service_user_id]);
        });
        return $form;
    }
}