<?php
namespace App\Repositories;
use App\Models\Banner;
use Dingo\Api\Http\Response;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Tymon\JWTAuth\Facades\JWTAuth;
/**
 * Created by PhpStorm.
 * User: durong
 * Date: 2019/6/4
 * Time: 上午9:39
 */

class BannerRepository
{
    public function __construct(Banner $banner)
    {
        $this->banner = $banner;
    }

    public function index($request)
    {
        $perPage = isset($request['per_page']) ? $request['per_page'] : env('PER_PAGE');
        $where = [];
        if(isset($request['id'])){
            $where[] = ['id', '=', $request['id']];
        }
        if(isset($request['is_open'])){
            $where[] = ['is_open', '=', $request['is_open']];
        }
        if (isset($request['name'])){
            $where[] = ['name', 'like', "%{$request['name']}%"];
        }

        if (isset($request['use_background'])){
            $where[] = ['use_background', '=', $request['use_background']];
        }

        return $this->banner->where($where)->orderBy('id', 'desc')->paginate($perPage);

    }

    public function bannerSets($request)
    {
        if ($request['use_background'] == 0){
            $banner = [
                'status' => 0,
                'tpl_id' => $request['tpl_id'],
                'area_type' => $request['area_type'],
                'rule' => json_encode($request['rule']),
            ];
        }else{
            if (!is_int($request['link_content_id'])){
                throw new HttpException(500, '链接内容必须是数字');
            }
            $strlen = mb_strlen($request['name'], "utf-8");
            if ($strlen > 20) {
                throw new HttpException(500, '名称不能超过20字');
            }

            $banner = [
                'name' => $request['name'],
                'link_content_id' => $request['link_content_id'],
                'image' => $request['image'],
                'type' => $request['type'],
                'is_open' => $request['is_open'] ?? '',
            ];
        }
        $banner['use_background'] = $request['use_background'];
        $banner['created_at'] = date('Y-m-d H:i:s');
        $banner['updated_at'] = date('Y-m-d H:i:s');

        $res = $this->banner->create($banner);

        if (!$res) {
            throw new HttpException(500, '添加失败,请重试');
        }
        if ($request['use_background'] == 0){
            $request['type'] = 0;//0表示新增
            $request['id'] = $res['id'];
            $request['rule'] = $res['rule'];
            $this->bannerIds($request);
        }
    }

    public function edit($request)
    {
        $banner = $this->banner->where('id', $request['id'])->first();

        $rule = $request['rule'];
        $banner->use_background = $request['use_background'];
        $banner->updated_at = date('Y-m-d H:i:s');
        if ($request['use_background'] == 0){
            $request['old_rule'] = $banner->rule;

            $banner->tpl_id = $request['tpl_id'];
            $banner->area_type = $request['area_type'];
            $banner->rule = json_encode($rule);
            $banner->status = 0;

            $banner_update = $banner->save();
            if (!$banner_update) {
                throw new HttpException(500, 'cms-banner更新失败');
            }
            $request['id'] = $banner->id;
            $request['rule'] = $rule;
            $request['type'] = 1;//1表示修改
            $this->bannerIds($request);

        }else{
            if (!is_int($request['link_content_id'])){
                throw new HttpException(500, '链接内容必须是数字');
            }
            $strlen = mb_strlen($request['name'], "utf-8");
            if ($strlen > 20) {
                throw new HttpException(500, '名称不能超过20字');
            }

            $banner->name = $request['name'];
            $banner->link_content_id = $request['link_content_id'];
            $banner->image = $request['image'];
            $banner->type = $request['type'];
            $banner->is_open = $request['is_open'] ?? '';

            $banner_update = $banner->save();
            if (!$banner_update) {
                throw new HttpException(500, '社区banner更新失败');
            }
        }

    }

    function bannerIds($request)
    {
        try {
            $url = config("customer.manage_service_url") . '/cms/v2/countSubject';
            if ($request['type'] == 0){
                $array = [
                    'json' => ['id' => $request['id'],'rule' => $request['rule'],'type' => $request['type']], 'query' => [], 'http_errors' => false, 'headers' => ['Authorization' => "Bearer " . JWTAuth::getToken()]
                ];
            }else{
                $array = [
                    'json' => ['id' => $request['id'],'rule' => $request['rule'],'type' => $request['type'],'old_rule' =>$request['old_rule']], 'query' => [], 'http_errors' => false, 'headers' => ['Authorization' => "Bearer " . JWTAuth::getToken()]
                ];
            }

            return http($url, $array, 'post');
        } catch (\Exception $e) {
            return [];
        }

    }

    public function bannerDelete($request)
    {
        $advertisement = $this->banner->where('id', $request['id'])->first();
        $res = $advertisement->delete();
        if (!$res){
            return Response::create([
                'message'  => '删除失败,请重试',
                'status_code'   => 500
            ]);
        }
        $request['banner_id'] = $advertisement->id;
        $this->editFloorBind($request);
    }

    public function editStatus($request)
    {
        $banner_id = $this->banner->find($request['id']);
        $banner_id->is_open = $request['is_open'];
        $banner_id->updated_at = date('Y-m-d H:i:s');

        $res = $banner_id->save();

        if (!$res) {
            throw new HttpException(500, '修改状态失败');
        }
        //banner关闭检测绑定楼层是否只有一个banner
        if ($request['is_open'] == 0){
            $request['banner_id'] = $request['id'];
            $this->editFloorBind($request);
        }
    }

    function editFloorBind($request)
    {
        try {
            $url = config("customer.manage_service_url") . '/cms/v2/floorBind';
            $array = [
                'json' => ['banner_id' => $request['banner_id']], 'query' => [], 'http_errors' => false, 'headers' => ['Authorization' => "Bearer " . JWTAuth::getToken()]
            ];

            return http($url, $array, 'post');
        } catch (\Exception $e) {
            return [];
        }
    }


}