package cn.service.impl;

import cn.monitor.model.OnlineUser;
import cn.pojo.vo.LoginUser;
import cn.service.IOnlineUserService;
import cn.util.core.IsKit;
import cn.util.core.TypeKit;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

/**在线用户*/
@Service
public class OnlineUserServiceImpl implements IOnlineUserService {

	/**
	 * 通过登录地址查询信息
	 *
	 * @param ipaddr 登录地址
	 * @param user 用户信息
	 * @return 在线用户信息
	 */
	@Override
	public OnlineUser selectOnlineByIpaddr(String ipaddr, LoginUser user)
	{
		if (StringUtils.equals(ipaddr, user.getIpaddr())){
			return loginUserToUserOnline(user);
		}
		return null;
	}

	/**
	 * 通过用户名称查询信息
	 *
	 * @param userName 用户名称
	 * @param user 用户信息
	 * @return 在线用户信息
	 */
	@Override
	public OnlineUser selectOnlineByUserName(String userName, LoginUser user)
	{
		if (StringUtils.equals(userName,user.getUsername())){
			return loginUserToUserOnline(user);
		}
		return null;
	}

	/**
	 * 通过登录地址/用户名称查询信息
	 *
	 * @param ipaddr 登录地址
	 * @param userName 用户名称
	 * @param user 用户信息
	 * @return 在线用户信息
	 */
	@Override
	public OnlineUser selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
	{
		if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())){
			return loginUserToUserOnline(user);
		}
		return null;
	}

	/**
	 * 设置在线用户信息
	 *
	 * @param user 用户信息
	 * @return 在线用户
	 */
	@Override
	public OnlineUser loginUserToUserOnline(LoginUser user)
	{
		if (IsKit.isNull(user)){
			return null;
		}
		OnlineUser onlineUser = new OnlineUser();
		onlineUser.setTokenId(user.getToken());
		onlineUser.setUserName(user.getUsername());
		onlineUser.setIpaddr(user.getIpaddr());
		onlineUser.setLoginLocation(user.getLoginLocation());
		onlineUser.setBrowser(user.getBrowser());
		onlineUser.setOs(user.getOs());
		onlineUser.setLoginTime(user.getLoginTime());
		
		Map<String, Object> deptMap =  user.getDept();
		if (IsKit.isNotNull(deptMap)) {
			onlineUser.setDeptName(TypeKit.objToStr(deptMap.get("deptName"))); 
		}
		return onlineUser;
	}
}
