<?php

namespace App\Admin\Controllers\Content;

use App\Admin\Extensions\Field\Template;
use App\Admin\Extensions\Form\ValueForm;
use App\Http\Controllers\Controller;
use App\Models\Ad;
use App\Models\AdCategory;
use App\Models\Subsite;
use App\Models\SubsiteAd;
use Encore\Admin\Controllers\HasResourceActions;
use Encore\Admin\Facades\Admin;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Grid\Filter;
use Encore\Admin\Layout\Content;
use Encore\Admin\Show;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;

//use Encore\Admin\Grid;

class AdController extends Controller
{
    use HasResourceActions;

    /**
     * Index interface.
     *
     * @param Content $content
     * @return Content
     */
    public function index(Content $content)
    {
        return $content
            ->header('广告列表')
            ->description(' ')
            ->body(view('admin.content.ad_list')->with(['grid' => $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)
    {
        $info    = Ad::find($id);
        $form    = new ValueForm();
        $ad_info = Ad::findOrFail($id);
        //$form->action('/admin/content/ads/update');
        $form->action(route('admin.ad.update'));
        $form->attribute('enctype', 'multipart/form-data');
        $form->disablePjax();
        $form->text('title', '广告标题')->default($ad_info->title)->help('(区分不同广告条目,并不在广告中显示)')->setWidth(4)->setMustMark();
        $display_option = [
            'on'  => ['value' => 1, 'text' => '是', 'color' => 'success'],
            'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
        ];
        $form->switch('is_display', '显示状态')->states($display_option)->default($ad_info->is_display)->setMustMark();
        if ($info->subsite_id == 0) {
            $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id');
        } else {
            $subsites      = Subsite::where([['effective', '=', 1], ['id', '<>', $info->subsite_id]])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();
            $subsites['0'] = '总站';
            $subsites      = collect($subsites);
        }
        if ($subsites->isNotEmpty() && $info->subsite_id == 0) {
            $relations = SubsiteAd::where(['ad_id' => $id])->get()->pluck('subsite_id')->toArray();
            $form->multipleSelect('relate_subsites', '同步分站')->options($subsites)->default($relations);
        } else {
            $form->hidden('relate_subsites');
        }
        $form->ignore(['relate_subsites']);

        $cate_option = AdCategory::all()->pluck('category_name', 'id');

        $form->select('category_id', '广告位')->options($cate_option)->default($ad_info->category_id)->setWidth(4)->attribute(['id' => 'sub_category'])->setMustMark();
        $form->number('list_order', '显示顺序')->default($ad_info->list_order)->min(0)->help('(数字越大越靠前)')->setMustMark();
        $form->date('started_at', '开始日期')
            ->format('YYYY-MM-DD')
            ->default($ad_info->started_at)
            ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])
            ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');
        $form->date('ended_at', '结束日期')
            ->format('YYYY-MM-DD')
            ->default($ad_info->ended_at)
            ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])
            ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');
        $form->textarea('note', '备注')->default($ad_info->note);

        $form->html("<div id='change_field'></div>")->plain();
        $form->hidden('alias')->value($ad_info->alias)->attribute('id', 'alias');
        $form->hidden('theme')->value($ad_info->theme);
        $form->hidden('type_id')->value($ad_info->type_id)->attribute('id', 'type_id');
        $form->hidden('id')->value($ad_info->id);

        $template = new Template();
        $template->setTemplatesId("text_div");
        if ($ad_info->type_id == '1') {
            $template->text('content', '文字内容')->default($ad_info->content)->help('(文字广告的显示内容)')->setMustMark();
            $template->url('url', '文字链接')->default($ad_info->url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
            $template->color('text_color', '文字颜色')->default($ad_info->text_color)->setMustMark();
        } else {
            $template->text('content', '文字内容')->help('(文字广告的显示内容)')->setMustMark();
            $template->url('url', '文字链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
            $template->color('text_color', '文字颜色')->setMustMark();
        }

        $template->setTemplatesId("image_div");
        if ($ad_info->type_id == '2') {
            $img_file = null;
            $img_url  = null;
            if (preg_match('/^http/', $ad_info->content)) {
                $img_url = $ad_info->content;
            } else {
                $img_file = $ad_info->content;
            }
            $template->image('img_file', '本地上传')->uniqueName()->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->value($img_file)->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
            $template->text('img_url', '或图片地址')->default($img_url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/img/baidu_logo.gif)');
            $template->url('url', '图片链接')->default($ad_info->url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
            $template->text('target', 'target')->default($ad_info->target)->help('(请输入_self等,默认_blank)');
            $template->text('explain', '图片说明文字')->default($ad_info->explain);
            $template->number('uid', '会员UID')->default($ad_info->uid)->min(0)->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)');
        } else {
            $template->image('img_file', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
            $template->text('img_url', '或图片地址')->help('(请输入包含http://或https://的完整链接,如http://www.baidu.com/img/baidu_logo.gif)');
            $template->url('url', '图片链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
            $template->text('explain', '图片说明文字');
            $template->number('uid', '会员UID')->min(0)->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)');
        }

        $template->setTemplatesId("code_div");
        if ($ad_info->type_id == '3') {
            $template->textarea('content', '代码')->default($ad_info->content)->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();
        } else {
            $template->textarea('content', '代码')->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();
        }

        $template->setTemplatesId("flash_div");
        if ($ad_info->type_id == '4') {
            $flash_file = null;
            $flash_url  = null;
            if (preg_match('/^images\//', $ad_info->content)) {
                $flash_file = $ad_info->content;
            } else {
                $flash_url = $ad_info->content;
            }
            $template->image('content', '本地上传')->default($flash_file)->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
            $template->url('url', '或者Flash地址')->default($flash_url)->help('(请输入包含http://或https://的完整链接,如: http://www.baidu.com/123.swf)');

        } else {
            $template->file('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
            $template->url('url', '或者Flash地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');

        }

        $template->setTemplatesId("vedio_div");
        if ($ad_info->type_id == '5') {
            $vedio_file = null;
            $vedio_url  = null;
            if (preg_match('/^images\//', $ad_info->content)) {
                $vedio_file = $ad_info->content;
            } else {
                $vedio_url = $ad_info->content;
            }
            $template->file('content', '本地上传')->default($vedio_file)->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
            $template->url('url', '或者视频地址')->default($vedio_url)->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');
        } else {
            $template->file('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark()->options(['layoutTemplates' => ['actionDelete' => '']]);
            $template->url('url', '或者视频地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');
        }
        $form->disableReset();
        $data['custom_form'] = $form->render();
        $data['temp']        = $template->render();
        $data['ad_info']     = $ad_info;
        return $content
            ->header('广告')
            ->description(' ')
            ->body(view('admin.content.ad_edit')->with($data));
    }

    public function update(Request $request)
    {
        $ad      = Ad::findOrFail($request->input('id'));
        $rules   = [
            'title'       => 'required|max:50',
            'is_display'  => 'required',
            'category_id' => 'required',
            'list_order'  => 'required|max:10',
            'note'        => 'max:80',
        ];
        $message = [
            'title.required'       => '广告标题不能为空。',
            'title.max'            => '广告标题长度不能超过50。',
            'is_display.required'  => '请选择显示状态。',
            'category_id.required' => '请选择广告位。',
            'list_order.required'  => '显示顺序不能为空。',
            'list_order.max'       => '显示顺序长度不能大于10。',
            'note.max'             => '备注长度不能超过80。',
        ];
        if ($request->input('started_at')) {
            $rules['started_at']        = 'date';
            $message['started_at.date'] = '开始日期格式不正确。';
        }
        if ($request->input('ended_at')) {
            $rules['ended_at']                  = 'date|after_or_equal:started_at';
            $message['ended_at.date']           = '结束日期格式不正确。';
            $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';
        }
        $type_id = $request->input('type_id');
        if ($type_id == '1') {
            $rules['content']               = 'required';
            $rules['text_color']            = 'required';
            $message['content.required']    = '文字内容不能为空。';
            $message['text_color.required'] = '文字颜色不能为空。';
        } else if ($type_id == '2') {
            $rules['img_file']         = 'mimes:gif,jpeg,bmp,png|max:1024';
            $rules['explain']          = 'max:80';
            $rules['uid']              = 'nullable|numeric';
            $message['img_file.mimes'] = '本地上传格式不正确。';
            $message['img_file.max']   = '本地上传文件大小不能超过1M。';
            $message['explain.max']    = '图片说明文字长度不能大于80。';
            /*$message['uid.required']                 = 'UID不能为空。';*/
            $message['uid.numeric'] = 'UID只能填写数字。';
        } else if ($type_id == '3') {
            $rules['content']            = 'required';
            $message['content.required'] = '代码不能为空。';
        } else if ($type_id == '4') {
            $rules['content']         = 'mimes:swf';
            $message['content.mimes'] = '本地上传格式不正确。';
        } else if ($type_id == '5') {
            $rules['content']         = 'mimes:swf,flv,f4v';
            $message['content.mimes'] = '本地上传格式不正确。';
        }
        $request->validate($rules, $message);


        $time       = date('Y-m-d H:i:s', time());
        $is_display = $request->input('is_display') == 'on' ? 1 : 0;
        $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
        $ended_at   = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;
        $type_id    = $request->input('type_id');
        $theme      = $request->input('theme') ? $request->input('theme') : 'default';
        $note       = $request->input('note') ? $request->input('note') : '';

        $ad->theme       = $theme;
        $ad->alias       = $request->input('alias');
        $ad->is_display  = $request->input('is_display') == 'on' ? 1 : 0;
        $ad->category_id = $request->input('category_id');
        $ad->type_id     = $type_id;
        $ad->title       = $request->input('title');
        $ad->note        = $request->input('note') ? $request->input('note') : '';
        $ad->list_order  = $request->input('list_order');
        $ad->started_at  = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
        $ad->ended_at    = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;
        $ad->updated_at  = $time;

        if ($type_id == '1') {   //文字广告
            $ad->content    = $request->input('content');
            $ad->url        = $request->input('url') ? $request->input('url') : '';
            $ad->text_color = $request->input('text_color') ? $request->input('text_color') : '#000000';
            $ad->uid        = 0;

        } else if ($type_id == '2') {  //图片广告
            $img_file = $request->input('img_file');
            $img_url  = $request->input('img_url');
            $url      = $request->input('url') ? $request->input('url') : '';
            $target   = $request->input('target') ? $request->input('target') : '_blank';
            $explain  = $request->input('explain');
            $uid      = $request->input('uid');
            $up_file  = null;
            if ($request->hasFile('img_file')) {
                $file    = 'img_file';
                $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));
            }
            $content = $up_file ? $up_file : $img_url;
            if ($content) {
                $ad->content = $content;
            }
            $ad->url        = $url;
            $ad->target     = $target;
            $ad->text_color = '#000000';
            $ad->uid        = $uid ? $uid : 0;
            $ad->explain    = $explain;

        } else if ($type_id == '3') {    //代码广告
            $content = $request->input('content') ? $request->input('content') : 0;
            if ($content) {
                $ad->content = $content;
            }
            $ad->uid        = 0;
            $ad->text_color = '#000000';
            $ad->url        = '';

        } else if ($type_id == '4' || $type_id == '5') {  //flash广告 、视频广告
            $url     = $request->input('url') ? $request->input('url') : '';
            $up_file = null;
            if ($request->hasFile('content')) {
                $file    = 'content';
                $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));
            }
            $content = $up_file ? $up_file : $url;
            if ($content) {
                $ad->content = $content;
            }
            $ad->url        = '';
            $ad->uid        = 0;
            $ad->text_color = '#000000';
        }
        $set_data = [];
        $subsites = $request->input('relate_subsites');
        if (empty($subsites)) {
            $subsites = [];
        }
        $subsites = array_merge([$ad->subsite_id], $subsites);
        foreach ($subsites as $k => $v) {
            if ($v !== null) {
                $set_data[] = [
                    'ad_id'      => $ad->id,
                    'subsite_id' => $v,
                ];
            }
        }

        if ($ad->save()) {
            if ($set_data) {
                SubsiteAd::where('ad_id', $ad->id)->delete();
                SubsiteAd::insert($set_data);
            }
            admin_toastr(trans('admin.save_succeeded'), 'success');
            return redirect(admin_base_path() . '/content/ad/index');
        } else {
            throw new \Exception(trans('admin.save_failed'));
        }
    }

    public function updates(Request $request)
    {
        $rules   = [
            'title'       => 'required|max:50',
            'is_display'  => 'required',
            'category_id' => 'required',
            'list_order'  => 'required|max:10',
            'note'        => 'max:80',
        ];
        $message = [
            'title.required'       => '广告标题不能为空。',
            'title.max'            => '广告标题长度不能超过50。',
            'is_display.required'  => '请选择显示状态。',
            'category_id.required' => '请选择广告位。',
            'list_order.required'  => '显示顺序不能为空。',
            'list_order.max'       => '显示顺序长度不能大于10。',
            'note.max'             => '备注长度不能超过80。',
        ];
        if ($request->input('started_at')) {
            $rules['started_at']        = 'date';
            $message['started_at.date'] = '开始日期格式不正确。';
        }
        if ($request->input('ended_at')) {
            $rules['ended_at']                  = 'date|after_or_equal:started_at';
            $message['ended_at.date']           = '结束日期格式不正确。';
            $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';
        }
        $type_id = $request->input('type_id');
        if ($type_id == '1') {
            $rules['content']               = 'required';
            $rules['text_color']            = 'required';
            $message['content.required']    = '文字内容不能为空。';
            $message['text_color.required'] = '文字颜色不能为空。';
        } else if ($type_id == '2') {
            $rules['img_file']                    = 'required_without:img_url|mimes:gif,jpeg,bmp,png';
            $rules['img_url']                     = 'required_without:img_file';
            $rules['explain']                     = 'max:80';
            $rules['uid']                         = 'required|numeric';
            $message['img_file.required_without'] = '本地上传或者图片地址填写一项。';
            $message['img_file.mimes']            = '本地上传格式不正确。';
            $message['img_url.required_without']  = '本地上传或者图片地址填写一项。';
            $message['explain.max']               = '图片说明文字长度不能大于80。';
            $message['uid.required']              = 'UID不能为空。';
            $message['uid.numeric']               = 'UID只能填写数字。';
        } else if ($type_id == '3') {
            $rules['content']            = 'required';
            $message['content.required'] = '代码不能为空。';
        } else if ($type_id == '4') {
            $rules['content']                    = 'required_without:url|mimes:swf';
            $rules['url']                        = 'required_without:content';
            $message['content.required_without'] = '本地上传或者Flash地址填写一项。';
            $message['content.mimes']            = '本地上传格式不正确。';
            $message['url.required_without']     = '本地上传或者Flash地址填写一项。';
        } else if ($type_id == '5') {
            $rules['content']                    = 'required_without:url|mimes:swf,flv,f4v';
            $rules['url']                        = 'required_without:content';
            $message['content.required_without'] = '本地上传或者填写视频地址填写一项。';
            $message['content.mimes']            = '本地上传格式不正确。';
            $message['url.required_without']     = '本地上传或者填写视频地址填写一项。';
        }
        $request->validate($rules, $message);
        $is_display = $request->input('is_display') == 'on' ? 1 : 0;
        $time       = date('Y-m-d H:i:s', time());
        $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
        $ended_at   = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;
        $type_id    = $request->input('type_id');
        $theme      = $request->input('theme') ? $request->input('theme') : 'default';
        $note       = $request->input('note') ? $request->input('note') : '';

        $form_data = [
            'theme'       => $theme,
            'alias'       => $request->input('alias'),
            'is_display'  => $is_display,
            'category_id' => $request->input('category_id'),
            'type_id'     => $type_id,
            'title'       => $request->input('title'),
            'note'        => $note,
            'list_order'  => $request->input('list_order'),
            'started_at'  => $started_at,
            'ended_at'    => $ended_at,
            'updated_at'  => $time,
        ];
        if ($type_id == '1') {
            //文字广告
            $form_data['content']    = $request->input('content');
            $form_data['url']        = $request->input('url');
            $form_data['text_color'] = $request->input('text_color') ? $request->input('text_color') : '#000000';
            $form_data['uid']        = 0;

        } else if ($type_id == '2') {
            //图片广告
            $img_file = $request->input('img_file');
            $img_url  = $request->input('img_url');
            $url      = $request->input('url');
            $explain  = $request->input('explain');
            $uid      = $request->input('uid');
            $up_file  = null;
            if ($request->hasFile('img_file')) {
                $file    = 'img_file';
                $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));
            }
            $content                 = $up_file ? $up_file : $img_url;
            $form_data['content']    = $content;
            $form_data['url']        = $url;
            $form_data['text_color'] = '#000000';
            $form_data['uid']        = $uid;
            $form_data['explain']    = $explain;


        } else if ($type_id == '3') {
            //代码广告
            $content                 = $request->input('content') ? $request->input('content') : 0;
            $form_data['content']    = $content;
            $form_data['uid']        = 0;
            $form_data['text_color'] = '#000000';
            $form_data['url']        = '';

        } else if ($type_id == '4' || $type_id == '5') {
            //flash广告 、视频广告
            $url     = $request->input('url') ? $request->input('url') : '';
            $up_file = null;
            if ($request->hasFile('content')) {
                $file    = 'content';
                $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));
            }
            $content                 = $up_file ? $up_file : $url;
            $form_data['content']    = $content;
            $form_data['url']        = '';
            $form_data['uid']        = 0;
            $form_data['text_color'] = '#000000';
        }

        if (Ad::where(['id' => $request->input('id')])->update($form_data)) {
            admin_toastr(trans('admin.save_succeeded'), 'success');
            return redirect(admin_base_path() . '/content/ad/index');
        } else {
            throw new \Exception(trans('admin.save_failed'));
        }
    }

    /**
     * Create interface.
     *
     * @param Content $content
     * @return Content
     */
    public function create(Content $content)
    {
        $form = new ValueForm();
        $form->action(route('ad.index'));
        $form->text('title', '广告标题')->help('(区分不同广告条目,并不在广告中显示)')->setWidth(4)->setMustMark();
        $display_option = [
            'on'  => ['value' => 1, 'text' => '是', 'color' => 'success'],
            'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
        ];
        $form->switch('is_display', '显示状态')->states($display_option)->default('1')->setMustMark();

        if (get_subsite_id() == 0) {
            $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id');
        } else {
            $subsites      = Subsite::where([['effective', '=', 1], ['id', '<>', get_subsite_id()]])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();
            $subsites['0'] = '总站';
            $subsites      = collect($subsites);
        }
        if ($subsites->isNotEmpty() && get_subsite_id() == 0) {
            $form->multipleSelect('relate_subsites', '同步分站')->options($subsites);
        } else {
            $form->hidden('relate_subsites');
        }
        $form->ignore(['relate_subsites']);
        $form->hidden('subsite_id')->value(get_subsite_id());

        $cate_option = AdCategory::all()->pluck('category_name', 'id');
        $form->select('category_id', '广告位')->options($cate_option)
            ->rules('required', ['required' => '请选择广告位。'])
            ->setWidth(4)->attribute(['id' => 'sub_category'])->setMustMark();

        $form->number('list_order', '显示顺序')->min(0)->default(0)->help('(数字越大越靠前)')->setMustMark();
        $form->date('started_at', '开始日期')
            ->format('YYYY-MM-DD')
            ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])
            ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');
        $form->date('ended_at', '结束日期')
            ->format('YYYY-MM-DD')
            ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])
            ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');
        $form->textarea('note', '备注');

        $form->html("<div id='change_field'></div>")->plain();
        $form->hidden('alias')->attribute('id', 'alias');
        $form->hidden('theme')->value('default');
        $form->hidden('type_id')->attribute('id', 'type_id');

        $template = new Template();

        $template->setTemplatesId("text_div");
        $template->text('content', '文字内容')->help('(文字广告的显示内容)')->setMustMark();
        $template->url('url', '文字链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
        $template->color('text_color', '文字颜色')->default('#000000')->setMustMark();

        $template->setTemplatesId("image_div");
        $template->image('img_file', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为gif/jpg/bmp/png,文件大小1000KB)')->setMustMark();
        $template->text('img_url', '或图片地址')->help('(如/images/logo.gif 或 http://www.baidu.com/img/baidu_logo.gif)');
        $template->url('url', '图片链接')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com)');
        $template->text('target', 'target')->help('(请输入_self等,默认_blank)');
        $template->text('explain', '图片说明文字');
        $template->number('uid', '会员UID')->min(0)->default(0)
            ->help('(设置会员UID后,当鼠标移动到图片上将会显示相关的职位和企业信息)')
            ->attribute(['maxlength' => '10', 'onkeyup' => 'if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\D/g,\'\');', 'onbeforepaste' => "clipboardData.setData('text',clipboardData.getData('text').replace(/\D/g,''))"]);

        $template->setTemplatesId("code_div");
        $template->textarea('content', '代码')->rows(1)->help('(请直接输入需要展现的广告代码)')->setMustMark();

        $template->setTemplatesId("flash_div");
        $template->image('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为:swf,文件大小:1000KB)')->setMustMark();
        $template->url('url', '或者Flash地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');

        $template->setTemplatesId("vedio_div");
        $template->image('content', '本地上传')->uniqueName()->setWidth(3)->help('(允许格式为swf/flv/f4v,文件大小5000KB,大文件FTP上传)')->setMustMark();
        $template->url('url', '或者视频地址')->help('(请输入包含http://或https://的完整链接,如:http://www.baidu.com/123.swf)');

        $form->disableReset();
        $data['custom_form'] = $form->render();
        $data['temp']        = $template->render();
        return $content
            ->header('广告')
            ->description(' ')
            ->body(view('admin.content.ad')->with($data));
    }

    public function changeCategory(Request $request)
    {
        $cate_option = AdCategory::all()->toArray();
        return response()->json(['data' => $cate_option, 'status' => '1']);
    }

    public function store(Request $request)
    {
        $rules   = [
            'title'       => 'required|max:50',
            'is_display'  => 'required',
            'category_id' => 'required',
            'list_order'  => 'required|max:10',
            'note'        => 'max:80',
        ];
        $message = [
            'title.required'       => '广告标题不能为空。',
            'title.max'            => '广告标题长度不能超过50。',
            'is_display.required'  => '请选择显示状态。',
            'category_id.required' => '请选择广告位。',
            'list_order.required'  => '显示顺序不能为空。',
            'list_order.max'       => '显示顺序长度不能大于10。',
            'note.max'             => '备注长度不能超过80。',
        ];
        if ($request->input('started_at')) {
            $rules['started_at']        = 'date';
            $message['started_at.date'] = '开始日期格式不正确。';
        }
        if ($request->input('ended_at')) {
            $rules['ended_at']                  = 'date|after_or_equal:started_at';
            $message['ended_at.date']           = '结束日期格式不正确。';
            $message['ended_at.after_or_equal'] = '结束日期不能早于开始日期。';
        }
        $type_id = $request->input('type_id');
        if ($type_id == '1') {
            $rules['content']               = 'required';
            $rules['text_color']            = 'required';
            $message['content.required']    = '文字内容不能为空。';
            $message['text_color.required'] = '文字颜色不能为空。';
        } else if ($type_id == '2') {
            $rules['img_file']                    = 'required_without:img_url|mimes:gif,jpeg,bmp,png|max:1024';
            $rules['img_url']                     = 'required_without:img_file';
            $rules['explain']                     = 'max:80';
            $rules['uid']                         = 'nullable|numeric';
            $message['img_file.required_without'] = '本地上传或者图片地址填写一项。';
            $message['img_file.mimes']            = '本地上传格式不正确。';
            $message['img_file.max']              = '本地上传文件大小不能超过1M。';
            $message['img_url.required_without']  = '本地上传或者图片地址填写一项。';
            $message['explain.max']               = '图片说明文字长度不能大于80。';
            //$message['uid.required']                 = 'UID不能为空。';
            $message['uid.numeric'] = 'UID只能填写数字。';
        } else if ($type_id == '3') {
            $rules['content']            = 'required';
            $message['content.required'] = '代码不能为空。';
        } else if ($type_id == '4') {
            $rules['content']                    = 'required_without:url|mimes:swf';
            $rules['url']                        = 'required_without:content';
            $message['content.required_without'] = '本地上传或者Flash地址填写一项。';
            $message['content.mimes']            = '本地上传格式不正确。';
            $message['url.required_without']     = '本地上传或者Flash地址填写一项。';
        } else if ($type_id == '5') {
            $rules['content']                    = 'required_without:url|mimes:swf,flv,f4v';
            $rules['url']                        = 'required_without:content';
            $message['content.required_without'] = '本地上传或者填写视频地址填写一项。';
            $message['content.mimes']            = '本地上传格式不正确。';
            $message['url.required_without']     = '本地上传或者填写视频地址填写一项。';
        }

        $request->validate($rules, $message);
        $is_display = $request->input('is_display') == 'on' ? 1 : 0;
        $time       = date('Y-m-d H:i:s', time());
        $started_at = $request->input('started_at') ? strtotime($request->input('started_at')) : 0;
        $ended_at   = $request->input('ended_at') ? strtotime($request->input('ended_at')) : 0;

        $subsite_id = $request->input('subsite_id');
        $theme      = $request->input('theme') ? $request->input('theme') : 'default';
        $note       = $request->input('note') ? $request->input('note') : '';

        $form_data = [
            'theme'       => $theme,
            'alias'       => $request->input('alias'),
            'is_display'  => $is_display,
            'category_id' => $request->input('category_id'),
            'type_id'     => $type_id,
            'title'       => $request->input('title'),
            'note'        => $note,
            'list_order'  => $request->input('list_order'),
            'started_at'  => $started_at,
            'ended_at'    => $ended_at,
            'subsite_id'  => $subsite_id,
            'created_at'  => $time,
            'updated_at'  => $time,
        ];
        if ($type_id == '1') {
            //文字广告
            $form_data['content']    = $request->input('content');
            $form_data['url']        = $request->input('url') ? $request->input('url') : '';
            $form_data['text_color'] = $request->input('text_color') ? $request->input('text_color') : '#000000';
            $form_data['uid']        = 0;

        } else if ($type_id == '2') {
            //图片广告
            $img_file = $request->input('img_file');
            $img_url  = $request->input('img_url');
            $url      = $request->input('url') ? $request->input('url') : '';
            $target   = $request->input('target') ? $request->input('target') : '_blank';
            $explain  = $request->input('explain');
            $uid      = $request->input('uid', 0);
            $up_file  = null;
            if ($request->hasFile('img_file')) {
                $file    = 'img_file';
                $up_file = $request->$file->store(config('admin.upload.directory.image'), config('admin.upload.disk'));
            }
            $content                 = $up_file ? $up_file : $img_url;
            $form_data['content']    = $content;
            $form_data['url']        = $url;
            $form_data['target']     = $target;
            $form_data['text_color'] = '#000000';
            $form_data['uid']        = $uid ? $uid : 0;
            $form_data['explain']    = $explain;


        } else if ($type_id == '3') {
            //代码广告
            $content                 = $request->input('content') ? $request->input('content') : 0;
            $form_data['content']    = $content;
            $form_data['uid']        = 0;
            $form_data['text_color'] = '#000000';
            $form_data['url']        = '';

        } else if ($type_id == '4' || $type_id == '5') {
            //flash广告 、视频广告
            $url     = $request->input('url') ? $request->input('url') : '';
            $up_file = null;
            if ($request->hasFile('content')) {
                $file    = 'content';
                $up_file = $request->$file->store(config('admin.upload.directory.file'), config('admin.upload.disk'));
            }
            $content                 = $up_file ? $up_file : $url;
            $form_data['content']    = $content;
            $form_data['url']        = '';
            $form_data['uid']        = 0;
            $form_data['text_color'] = '#000000';
        }
        $subsites = $request->input('relate_subsites');
        if (empty($subsites)) {
            $subsites = [];
        }
        if ($ad = Ad::create($form_data)) {
            $set_data   = [];
            $set_data[] = [
                'ad_id'      => $ad->id,
                'subsite_id' => get_subsite_id(),
            ];
            if ($subsites) {
                foreach ($subsites as $k => $v) {
                    if ($v) {
                        $set_data[] = [
                            'ad_id'      => $ad->id,
                            'subsite_id' => $v,
                        ];
                    }
                }
            }
            if ($set_data) {
                SubsiteAd::insert($set_data);
            }

            admin_toastr(trans('admin.save_succeeded'), 'success');
            return redirect(admin_base_path() . '/content/ad/index');
        } else {
            throw new \Exception(trans('admin.save_failed'));
        }
    }

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

        $grid->model()->when(get_subsite_id() > 0, function ($query) {
            $query->where('subsite_id', get_subsite_id());
        })->orderBy('list_order', 'DESC')->orderBy('created_at', 'DESC');


        $grid->title('广告标题')->display(function () {
            $logo_html = '';
            if ($this->type_id == '2') {
                //判断图片中是否包含http
                if (preg_match('/^http/', $this->content)) {
                    $logo_html = '<span class="vtip" title="<img src=\'' . $this->content . '\'  height=120>">
                            <img class="avatar small" src="' . $this->content . '" align="absmiddle" style="width: 22px;height: 22px;">
                        </span>';
                } else {
                    $logo_html = '<span class="vtip" title="<img src=\'' . upload_asset($this->content) . '\'  height=120>">
                            <img class="avatar small" src="' . upload_asset($this->content) . '" align="absmiddle" style="width: 22px;height: 22px;">
                        </span>';
                }
            }
            return $logo_html . $this->title;
        })->width(250);
        $grid->show_category()->category_name('所属广告位')->width(200);
        $grid->type_id('广告类型')->display(function () {
            if ($this->type_id == '1') {
                return '文字';
            } else if ($this->type_id == '2') {
                return '图片';
            } else if ($this->type_id == '3') {
                return '代码';
            } else if ($this->type_id == '4') {
                return 'Flash';
            } else if ($this->type_id == '5') {
                return '视频';
            }
        });
        if (get_subsite_open()) {
            $grid->subsite_id('所属分站')->display(function () {
                $subsites = Cache::get('subsites_list');
                if (array_has($subsites, $this->subsite_id)) {
                    return $subsites[$this->subsite_id]['sitename'];
                }
                return '';
            });
        }

        $grid->started_at('开始日期')->display(function () {
            if (!$this->started_at) {
                return date('Y-m-d', strtotime($this->created_at));
            } else {
                return $this->started_at;
            }

        });
        $grid->ended_at('到期日期')->display(function () {
            if ($this->ended_at > 0 && strtotime($this->ended_at) <= strtotime(date('Y-m-d'))) {
                return '<span style="color:#FF6600">已经到期</span>';
            } else {
                return $this->ended_at ? $this->ended_at : '无限制';
            }
        });
        $grid->is_display('状态')->display(function () {
            return $this->is_display ? '正常' : '暂停';
        });
        $grid->list_order('排序');

        //新增按钮
        if (Admin::user()->can('content_ad_list_create')) {
            $grid->disableCreateButton(false);
        }
        //批量删除
        if (Admin::user()->can('content_ad_list_delete')) {
            $grid->tools(function ($tools) {
                $tools->batch(function ($batch) {
                    $batch->disableDelete(false);
                });
            });
        } else {
            $grid->disableRowSelector();
        }

        $grid->actions(function ($actions) {
            if (Admin::user()->can('content_ad_list_edit')) {
                if ($actions->row['subsite_id'] == get_subsite_id() || get_subsite_id() == 0) {
                    $actions->disableEdit(false);
                }
            }
            if (Admin::user()->can('content_ad_list_delete')) {
                if ($actions->row['subsite_id'] == get_subsite_id() || get_subsite_id() == 0) {
                    $actions->disableDelete(false);
                }
            }
        });

        $grid->filter(function (Filter $filter) {
            $filter->disableIdFilter();
            $filter->column(2 / 3, function ($filter) {
                $display_option = ['' => '不限', '1' => '正常', '0' => '暂停'];
                $filter->equal('is_display', '显示状态')->radio($display_option);

                $date1 = strtotime(date('Y-m-d', strtotime("+1 day") - 1)) - 1;
                $date3 = strtotime(date('Y-m-d', strtotime("+4 day") - 1)) - 1;
                $date7 = strtotime(date('Y-m-d', strtotime("+8 day") - 1)) - 1;

                $date_option = [
                    ''     => '不限',
                    $date1 => '已经到期',
                    $date3 => '三天内',
                    $date7 => '一周内',
                ];
                $filter->where(function ($query) {
                    $ended_at   = "{$this->input}";
                    $start      = strtotime(date('Y-m-d', strtotime("+1 day") - 1)) - 1;
                    $start_time = 0;
                    if ($ended_at > $start) {
                        $start_time = strtotime(date('Y-m-d', time())) - 1;
                    }
                    $query->whereRaw('ended_at > ' . $start_time . ' and ended_at < ' . "{$this->input}");
                }, '到期时间', 'ended_at')->radio($date_option);
                $subsites = Subsite::where(['effective' => 1])->orderBy('order', 'asc')->get()->pluck('sitename', 'id')->toArray();
                if ($subsites) {
                    $subsites = ['' => '不限', '0' => '总站'] + $subsites;
                    $filter->equal('subsite_id', '所属分站')->select($subsites);
                }
                $cates   = AdCategory::get(['id', 'category_name'])->toArray();
                $pre_arr = ['id' => '', 'category_name' => '不限'];
                array_unshift($cates, $pre_arr);
                $cates = collect($cates)->pluck('category_name', 'id');
                $filter->equal('category_id', '广告位')->select($cates);
                $filter->like('title', '广告标题');
            });
        });

        return $grid;
    }

    public function getCategory(Request $request)
    {
        $subsite_id = $request->input('q');
        $where      = [];
        if ($subsite_id === null) {
            $where = [];
        } else {
            $where = ['subsite_id' => $subsite_id];
        }
        $cates   = AdCategory::where($where)->get(['id', 'category_name'])->toArray();
        $pre_arr = ['id' => '', 'category_name' => '不限'];
        array_unshift($cates, $pre_arr);
        return collect($cates);
    }

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

        $show->id('ID');
        $show->title('广告标题');
        $show->is_display('显示状态')->as(function ($is_display) {
            return $is_display ? '正常' : '暂停';
        });
        if (get_subsite_open()) {
            $show->subsite_id('所属分站')->as(function ($subsite_id) {
                if ($subsite_id) {
                    $Subsite = Subsite::findOrFail($subsite_id);
                    return $Subsite->sitename;
                }
                return '总站';
            });
        }

        $show->category_id('广告位')->as(function ($category_id) {
            $cate_info = AdCategory::where(['id' => $category_id])->first();
            if ($cate_info) {
                return $cate_info->category_name;
            } else {
                return '&nbsp';
            }
        });
        $show->list_order('显示顺序');
        $show->started_at('开始日期')->as(function ($started_at) {
            return $started_at ? $started_at : '无限制';
        });
        $show->ended_at('结束日期')->as(function ($ended_at) {
            return $ended_at ? $ended_at : '无限制';
        });
        $show->note('备注')->as(function ($note) {
            return $note ? $note : '&nbsp';
        })->setEscape(false);

        if ($ad_info->type_id == '1') {
            $show->content('文字内容');
            $show->url('文字链接')->as(function ($url) {
                return $url ? $url : '&nbsp';
            })->setEscape(false);
            $show->text_color('文字颜色')->as(function ($text_color) {
                $html = '<i style="background-color: ' . $text_color . ';padding: 5px 15px;"></i>';
                return $html;
            })->setEscape(false);

        } else if ($ad_info->type_id == '2') {
            $show->content('图片')->image();
            $show->url('图片链接')->as(function ($url) {
                return $url ? $url : '&nbsp';
            })->setEscape(false);
            $show->explain('图片说明文字')->as(function ($explain) {
                return $explain ? $explain : '&nbsp';
            })->setEscape(false);
            $show->uid('会员UID');
        } else if ($ad_info->type_id == '3') {
            $show->content('代码');
        } else if ($ad_info->type_id == '4') {
            $show->content('Flash地址')->image();
        } else if ($ad_info->type_id == '5') {
            $show->content('视频地址')->image();
        }

        $show->created_at('添加时间');
        $show->updated_at('更新时间');

        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Ad);

        $form->text('title', '广告标题')->help('(区分不同广告条目,并不在广告中显示)');
        $display_option = [
            'on'  => ['value' => 1, 'text' => '是', 'color' => 'success'],
            'off' => ['value' => 0, 'text' => '否', 'color' => 'danger'],
        ];
        $form->switch('is_display', '显示状态')->states($display_option)->default('1');

        $subsites = array_merge(['0' => '总站'], ['1' => '定海', '2' => '普陀']);
        $form->checkbox('subsite_id', '所属分站')->options($subsites)->default('0');


        $cate_option = AdCategory::all()->pluck('category_name', 'id');
        $form->select('category_id', '广告位')->options($cate_option)->setWidth(3);

        $form->number('list_order', '显示顺序')->help('(数字越大越靠前)');
        $form->date('started_at', '开始日期')
            ->format('YYYY-MM-DD')
            ->rules('required|date', ['required' => '开始日期不能为空。', 'date' => '开始日期格式不正确。'])
            ->help('(设置广告起始日期,格式yyyy-mm-dd,留空为不限制起始日期)');
        $form->date('ended_at', '结束日期')
            ->format('YYYY-MM-DD')
            ->rules('required|date', ['required' => '结束日期不能为空。', 'date' => '结束日期格式不正确。'])
            ->help('(设置广告结束日期,格式yyyy-mm-dd,留空为不限制结束日期)');
        $form->textarea('note', '备注');
        return $form;
    }

    public function destroy($id)
    {
        $ids = [];
        if ($id) {
            $ids = explode(',', $id);
        }
        if (get_subsite_id() == 0) {
            $filter_id = $id;
        } else {
            $seletctors = Ad::where(['subsite_id' => get_subsite_id()])->whereIn('id', $ids)->get()->pluck('id')->toarray();
            if ($seletctors) {
                $filter_id = implode(',', $seletctors);
            } else {
                $filter_id = '';
            }
        }

        if ($filter_id) {
            if ($this->form()->destroy($filter_id)) {
                $data = [
                    'status'  => true,
                    'message' => trans('admin.delete_succeeded'),
                ];
            } else {
                $data = [
                    'status'  => false,
                    'message' => trans('admin.delete_failed'),
                ];
            }
        } else {
            $data = [
                'status'  => false,
                'message' => '不能删除其它分站数据!',
            ];
        }
        return response()->json($data);
    }
}