<?php
	namespace App\Http\Controllers;

	use Illuminate\Http\Request;
	use App\Http\Requests;
	use App\Http\Controllers\Controller;
	use DB;

	class PermController extends Controller 
	{
		// 检查用户是否具有系统访问权限
		public function checkAccess($request)
		{
			$user_id   = $request->user->userId;
			$role = $this->getUserRole($request);

			if ($role == 1) return true; // 超级管理员或系统管理员直接进入

			$userPerms = $this->getUserAllPerms($user_id, $role);

			if (!$userPerms) return false;

			if (in_array('apply_access', $userPerms)) return true; // 访问权限ID是否存在

			return false;
		}

		// 获取系统信息
		public function getBusinessInfo()
		{
			// 根据域名查询系统业务ID
			$business = DB::table('t_business_config')->where('url', Config('website.order_url'))->first();

			return !empty($business) ? $business : false;
		}

		// 获取用户角色
		public function getUserRole(Request $request) 
		{
			$uid   = $request->user->userId;
			$email = $request->user->email;

			if ($email == 'admin@ichunt.com') {
				return 1;
			}

			// 根据域名查询系统业务ID
			$business = $this->getBusinessInfo();

			if ($business) {
				$bid = $business->bid;

				// 权限系统配置的管理帐号
				$adminAccount = json_decode($business->admin, true);

				if (in_array($email, $adminAccount)) {
					return 1;
				}

				// 根据用户ID和业务ID查看角色
				$userPerm = DB::table('t_user_perm')->where(['userId' => $uid, 'bid' => $bid])->first();
				
				if (empty($userPerm)) {
					return 0;
				} else {
					if ($userPerm->roles == 'null') return 0;
					
					$role = json_decode($userPerm->roles, true);
					
					foreach ($role as $v) {
						$department = DB::table('t_role_perm')->where(['roleId' => $v, 'bid' => $bid])->first();

						if ($department->name == '管理员') {
							return 1;
						}else if ($department->name == '经理') {
							return 2;
						} else if ($department->name == '交易员') {
							return 3;
						} else if ($department->name == '客服') {
							return 4;
						} else if ($department->name == '测试') {
							return 5;
						} else if ($department->name == '京东自营') {
							return 6;
						} else if ($department->name == '自营客服') {
							return 7;
						} else if ($department->name == '运营助理') {
							return 8;
						} else if ($department->name == '财务') {
							return 9;
						} else {
							return 0;
						}
					}
				}
			}

			return 0;
		}

		// 获取所有角色用户集合
		public function getRoleUsers(Request $request, $roleName) 
		{
			// 根据域名查询系统业务ID
			$business = $this->getBusinessInfo();

			$userId = array();
			$roleUsers = array();

			if ($business) {
				$bid = $business->bid;

				$role = DB::table('t_role_perm')->where(['bid' => $bid, 'name' => $roleName])->first();

				$roleId = $role->roleId;

				$user = DB::select("SELECT * FROM `t_user_perm` WHERE `bid` = $bid AND `roles` REGEXP $roleId");

				if ($user) {
					foreach ($user as $v) {
						$userId[] = $v->userId;
					}

					if ($userId) {
						foreach ($userId as $id) {
							$userInfo = DB::table('user_info')->where('userId', $id)->select('userId', 'name', 'status')->first();

							// 判断用户是否已离职 4为离职状态
							// if ($userInfo->status != 4) {
								$roleUsers[] = $userInfo;
							// } 

							continue;
						}
						
					}
				}
			}

			return $roleUsers;
		}

		// 获取权限菜单
		public function getPermMenu($menus, $user_id)
		{
			$userPerms = $this->getUserAllPerms($user_id);
			
			if ($userPerms) {
				return $this->handleMenus($menus, $userPerms);
			}

			return false;
		}

		// 获取用户所有权限
		public function getUserAllPerms($user_id, $role=0)
		{
			// 根据域名查询系统业务ID
			$business = $this->getBusinessInfo();

			if ($business) {
				if ($role != 1) {
					$bid = $business->bid;

					$url = Config('website.perm_api').$user_id.'/'.$bid;

					$userPerms = json_decode(curlApi($url), true);

					if ($userPerms && $userPerms['retcode'] == 0) {
						return $userPerms['data']['perms'];
					}
				} else { // 获取管理员所有权限
					return $this->getAllPerms(json_decode($business->configs, true));
				}
			}

			return false;
		}

		// 获取系统配置权限
		public function getAllPerms($configs)
		{
			$perms = [];

			foreach ($configs as $k => $v) {
				$perm_a = [];
				$perm_b = [];

				if (isset($v['childs']) && count($v['childs']) > 0) {
					$perm_b = $this->getAllPerms($v['childs']);
				} else {
					$perm_a[] = $v['permId'];
				}

				$perms = array_merge($perms, array_merge($perm_a, $perm_b));
			}

			return $perms;
		}

		// 处理菜单
		public function handleMenus($menus, $perms)
		{
			foreach ($menus as $k => $v) {
				if (strlen($v->href) > 2) {
		            if (preg_match('/\/web\//', $v->href)) {
		                $permId = str_replace('/web/','',$v->href);
		            } else {
		                $permId = str_replace('/', '', $v->href);
		            }

		            // 查看菜单权限
		            $permId = $permId . '_check';

		           	if (!in_array($permId, $perms)) {
		                unset($menus[$k]);
		           	}
		        }

		        if (count($v->childs) > 0) {
		        	$menus[$k]->childs = array_values($this->handleMenus($v->childs, $perms));

		        	if (empty($menus[$k]->childs)) {
		        		unset($menus[$k]);
		        	}
		        }
			}

			return array_values($menus);
		}
	}