
package org.tio.sitexxx.service.vo;

import lombok.Data;
import org.tio.sitexxx.service.model.main.IpInfo;
import org.tio.sitexxx.service.model.main.User;
import org.tio.sitexxx.service.model.main.UserAgent;
import org.tio.sitexxx.service.service.base.UserService;
import org.tio.utils.SystemTimer;

import java.io.Serializable;
import java.util.List;

/**
 * 字段简化版的User，用于传递给其它用户展示的
 * @author tanyaowu 
 * 2016年10月25日 下午2:37:57
 */
@Data
public class SimpleUser implements Serializable {

	private static final long	serialVersionUID	= 5240107764998103700L;
	/**
	 * 可能是这个用户
	 */
	private SimpleUser			may					= null;
	/**
	 * id
	 */
	private Integer				i;
	/**
	 * connection id， tcp连接唯一标识，对应channelContext的id字段
	 */
	private String				cid;
	/**
	 * 昵称
	 */
	private String				n					= null;
	/**
	 * 1：机器人
	 * 2：正常人
	 */
	private Short				x					= 2;
	/**
	 * 角色
	 */
	private List<Short>			r;
	/**
	 * 等级
	 */
	private Integer				l;
	/**
	 * 头像
	 */
	private String				a;
	/**
	 * 手机号码
	 */
	private String				phone				= null;
	/**
	 * loginname登录名
	 */
	private String				ln					= null;
	/**
	 * 连接创建时间（和ChannelContext绑定时，此值才有意义）
	 */
	private long				timeCreated			= SystemTimer.currTime;
	/**
	 * 对于channel，当前所在的groupid
	 */
	private String				groupid;
	/**
	 * ip信息
	 */
	private IpInfo ipInfo;
	/**
	 * 设备信息，手机端才有
	 */
	private MobileInfo			mobileInfo;
	/**
	 * 浏览器信息，PC才有
	 */
	private UserAgent userAgent;

	/**
	 * 根据user对象创建SimpleUser对象，建议不要用反射，添加字段时，注意修改本方法
	 * @param user
	 * @return
	 * @author tanyaowu
	 */
	public static SimpleUser fromUser(User user) {
		if (user == null) {
			return null;
		}

		SimpleUser ret = new SimpleUser();
		ret.setI(user.getId());
		ret.setN(user.getNick());
		ret.setR(user.getRoles());
		ret.setA(user.getAvatar());
		ret.setLn(user.getLoginname());
		return ret;
	}

	/**
	 * 
	 * @param uid
	 * @return
	 * @author tanyaowu
	 */
	public static SimpleUser fromUid(Integer uid) {
		if (uid == null) {
			return null;
		}
		/**
		 * TO-USER-缺少用户状态处理，根据业务处理
		 */
		User user = UserService.ME.getById(uid);
		return fromUser(user);
	}
}
