<?php

namespace App\Http\Middleware;

use Closure;

class Menu
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $isApi = $request->ajax();
        $user = $request->user;
        //处理权限和菜单
        $permArr = config('perm.perm');
        $action = $request->route('key');
        empty($action) && $action = 'Dashboard';


        //获取菜单
        if (!$isApi) {
            $menuConfig = json_decode(curl($permArr['menuUrl'] . $permArr['menuId']), true);
            if (empty($menuConfig['data'])) {
                return $this->view('error', '菜单生成错误,请联系技术');
            } else {
                $menuConfig = $menuConfig['data'];
            }
            $menusData = menu($menuConfig, $request->user->userId);
            $menus = !in_array($request->user->userId, $permArr['adminGroup']) ?
                $menusData : $menuConfig;
            if (empty($menus)) {
                return $this->view('Auth', '没有访问权限', $permArr['goUrl']);
            }
            //还要判断是否是基石的url,是的话,要返回绝对地址
            $menus = $this->getAbsoluteUrl($menus);
            $request->menus = $menus;
        }
        if (!in_array($user->userId, $permArr['adminGroup']) && $action != 'Dashboard') {//不是超级管理员
            $perm = perm($request->user->userId, $action);
            if ($perm !== true) {
                if ($isApi) {
                    return apiReturn(10001, '没有权限');
                }
                return $this->view('Auth', '没有访问权限', $permArr['goUrl']);
            }
        }
        return $next($request, $action);
    }

    //获取绝对地址,有一些是嵌入到其它系统内部的,所以要是外链地址
    private function getAbsoluteUrl($menus)
    {
        foreach ($menus as &$menu) {
            foreach ($menu['childs'] as $k => &$v) {
                $href = $v['href'];
                $array = explode('/', $href);
                $routerName = end($array);
                $urls = config('website.AbsoluteUrls');
                $v['href'] = !empty($urls[$routerName]) ? $urls[$routerName] : $v['href'];
            }
        }
        //添加固定死的外链
        $urls = [
            [
                'title' => '商机管理',
                'href' => 'https://xinlian.ichunt.com',
                'class' => '',
                'target' => '_blank',
                'childs' => [],
            ],
            [
                'title' => '询报价管理',
                'href' => 'http://frq.ichunt.net/?jumpUrl=/index/dashboard',
                'class' => '',
                'target' => '_blank',
                'childs' => []
            ],
            [
                'title' => '数据流管理',
                'href' => 'http://access.ichunt.net/web/board',
                'class' => '',
                'target' => '_blank',
                'childs' => []
            ],

        ];
        $menus = array_merge($menus, $urls);
        return $menus;
    }

    private function view($errcode, $errinfo, $goUrl = '')
    {
        $data = [
            'errcode' => $errcode,
            'errinfo' => $errinfo,
            'url' => $goUrl
        ];
        return view('errors.error', $data);
    }
}