package com.javaweb.web.rbac.controller;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.shiro.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.javaweb.entity.rbac.Module;
import com.javaweb.entity.rbac.Role;
import com.javaweb.entity.rbac.User;
import com.javaweb.util.self.Constant;
import com.javaweb.util.self.ShiroUtil;
import com.javaweb.web.rbac.service.ModuleService;
import com.javaweb.web.rbac.service.UserService;

//该路径下的访问对所有登录的用户开放
@Controller
@RequestMapping(value="/web/main")
public class LoginOpenController {
	
	@Autowired
	private UserService userService;

	@Autowired
	private ModuleService moduleService;
	
	
	//获得当前角色下的指定菜单下的所有操作
	@SuppressWarnings("unchecked")
	@GetMapping(value="/getRoleModuleOperations/{moduleId}",produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String getRoleModuleOperations(HttpServletRequest request, 
  								          HttpServletResponse response,
  								          @PathVariable String moduleId){
		JSONObject jo = new JSONObject();
		Session session = ShiroUtil.getSession();
		List<Role> roleList = (List<Role>)session.getAttribute(Constant.SESSION_ROLE);
		int superAdminFlag = 0;
		for (int i = 0; i < roleList.size(); i++) {
			if(roleList.get(i).getRoleid().equals(Constant.ROLE_ADMIN_ID)){
				superAdminFlag = 1;
				break;
			}
		}
		List<Module> operationList = moduleService.getRoleModuleOperations(moduleId,roleList,superAdminFlag);
		jo.put("operation", operationList);
		return jo.toString();
	}
	
	@PostMapping(value="/selectUserByUserName",produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	//判断用户名是否重复
	public String selectUserNameByUserId(HttpServletRequest request,
			  							 HttpServletResponse response,
			  							 @RequestBody User user){
		JSONObject jo = new JSONObject();
		String username = user.getUsername();
		int count = userService.selectUserByUserName(username);
		if(count==0){//用户名不存在
			jo.put("create", 1);
		}else{
			jo.put("create", 0);
		}
		return jo.toString();
	}
	
	//获得测试主机信息
	@GetMapping(value="/getHostInfo",produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	public String getHostInfo(HttpServletRequest request,
							  HttpServletResponse response){
		JSONObject jo = new JSONObject();
		String path = request.getContextPath();
		String basePath = null;
		try {
			InetAddress addr = InetAddress.getLocalHost();
			basePath = request.getScheme()+"://"+addr.getHostAddress()+":"+request.getServerPort()+path+"/";
		} catch (UnknownHostException e) {
			basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
		} 
		jo.put("host", basePath);
		return jo.toString();
	}
	
	
	/**
	//获取客户端IP地址
	private String getClientIp(HttpServletRequest request) {
        String ip = request.getHeader("x-forwarded-for");
        //String ip = request.getHeader("X-real-ip");
        if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP"); 
        }
        if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        if((ip!=null)&&(!"".equals(ip.trim()))) {
            ip = ip.split(",")[0];
        }
        return ip;
    }
	
	//获取服务端IP地址
	private String getServerIp(HttpServletRequest request){
		String ip = request.getHeader("X-Real-IP");
        if (ip!=null && !"".equals(ip.trim()) && !"unknown".equalsIgnoreCase(ip)) {
            return ip;
        }
        ip = request.getHeader("X-Forwarded-For");
        if (ip!=null && !"".equals(ip.trim()) && !"unknown".equalsIgnoreCase(ip)) {
            int index = ip.indexOf(",");
            if (index != -1) {
                return ip.substring(0, index);
            } else {
                return ip;
            }
        } else {
            return request.getRemoteAddr();
        }  
	}
	*/ 
	
}