package com.uas.account.entity;

import java.io.Serializable;

import com.uas.sso.common.util.StringUtil;

/**
 * 用户
 * 
 * @author yingp
 * 
 */
public class User implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String appId;

	private Long spaceId;

	private String spaceUID;

	private String spaceDialectUID;

	private Long id;

	private String uid;

	private String secondUID;

	private String dialectUID;

	private String name;

	private String password;

	private String salt;

	private Short hr;

	private Short pwdSecLevel;

	private Long lastLoginTime;

	public User() {
	}

	public User(App app, UserSpace userSpace, UserSpaceDetail detail) {
		this.setAppId(app.getUid());
		this.setName(detail.getAdminName());
		this.setUid(detail.getAdminTel());
		this.setSecondUID(detail.getAdminEmail());
		this.setSpaceId(userSpace.getId());
		this.setSpaceUID(userSpace.getUid());
		this.setSpaceDialectUID(userSpace.getDialectUID());
	}

	public User(App app, UserSpaceDetail detail) {
		this.setAppId(app.getUid());
		this.setName(detail.getAdminName());
		this.setUid(detail.getAdminTel());
		this.setSecondUID(detail.getAdminEmail());
	}

	public User(App app, UserSpace userSpace, UserDetail detail) {
		this.setAppId(app.getUid());
		this.setName(detail.getName());
		this.setUid(detail.getMobile());
		this.setSecondUID(detail.getEmail());
		this.setSpaceId(userSpace.getId());
		this.setSpaceUID(userSpace.getUid());
		this.setSpaceDialectUID(userSpace.getDialectUID());
	}

	public User(App app, UserDetail detail) {
		this.setAppId(app.getUid());
		this.setName(detail.getName());
		this.setUid(detail.getMobile());
		this.setSecondUID(detail.getEmail());
	}

	/**
	 * 属于哪个应用
	 */
	public String getAppId() {
		return appId;
	}

	public void setAppId(String appId) {
		this.appId = appId;
	}

	/**
	 * 属于哪个用户集
	 */
	public Long getSpaceId() {
		return spaceId;
	}

	public void setSpaceId(Long spaceId) {
		this.spaceId = spaceId;
	}

	/**
	 * ID
	 */
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	/**
	 * 全局唯一标识，例如手机号、身份证号，所有接入的业务系统都认可使用的同一个标识
	 */
	public String getUid() {
		return uid;
	}

	public void setUid(String uid) {
		this.uid = uid;
	}

	/**
	 * 名称
	 */
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 属于哪个用户集
	 * 
	 * <pre>
	 * 应用如果没保存账户中心的UserSpace.id也没关系，提供appId和UserSpace.UID即可
	 * </pre>
	 */
	public String getSpaceUID() {
		return spaceUID;
	}

	public void setSpaceUID(String spaceUID) {
		this.spaceUID = spaceUID;
	}

	/**
	 * 密码，新增、修改时请提交明文
	 */
	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * 加密盐值，允许每个用户的不一样
	 */
	public String getSalt() {
		return salt;
	}

	public void setSalt(String salt) {
		this.salt = salt;
	}

	@Override
	public String toString() {
		return "&appId=" + StringUtil.nvl(appId, "") + "&spaceId=" + StringUtil.nvl(spaceId, "") + "&spaceUID="
				+ StringUtil.nvl(spaceUID, "") + "&spaceDialectUID=" + StringUtil.nvl(spaceDialectUID, "") + "&id="
				+ StringUtil.nvl(id, "") + "&uid=" + StringUtil.nvl(uid, "") + "&secondUID="
				+ StringUtil.nvl(secondUID, "") + "&name=" + StringUtil.nvl(name, "") + "&password="
				+ StringUtil.nvl(password, "") + "&salt=" + StringUtil.nvl(salt, "") + "&dialectUID="
				+ StringUtil.nvl(dialectUID, "");
	}

	/**
	 * 业务系统自己的，除UID（例如手机号）之外的，唯一标识字段（例如，user_uu） <br>
	 * 因为业务系统可能历史原因，部分账号并没有UID（手机号）
	 * <p>
	 * 在业务系统没有保存ID，也不保证UID一定有数据的情况下使用
	 * </p>
	 * 
	 * @return
	 */
	public String getDialectUID() {
		return dialectUID;
	}

	public void setDialectUID(String dialectUID) {
		this.dialectUID = dialectUID;
	}

	/**
	 * 业务系统自己的，除spaceUID之外的，唯一标识字段（例如，sec$userenterprise.en_uu） <br>
	 * 因为业务系统可能历史原因，部分企业信息并没有UID，也就没有spaceUID
	 * <p>
	 * 在业务系统没有保存spaceId，也不保证spaceUID一定有数据的情况下使用
	 * </p>
	 * 
	 * @return
	 */
	public String getSpaceDialectUID() {
		return spaceDialectUID;
	}

	public void setSpaceDialectUID(String spaceDialectUID) {
		this.spaceDialectUID = spaceDialectUID;
	}

	/**
	 * 除UID外的次要UID，比如邮箱名
	 * 
	 * @return
	 */
	public String getSecondUID() {
		return secondUID;
	}

	public void setSecondUID(String secondUID) {
		this.secondUID = secondUID;
	}

	/**
	 * 密码安全等级（1、低，2、中，3、高）
	 *
	 * @return
	 */
	public Short getPwdSecLevel() {
		return pwdSecLevel;
	}

	public void setPwdSecLevel(Short pwdSecLevel) {
		this.pwdSecLevel = pwdSecLevel;
	}

	public Long getLastLoginTime() {
		return lastLoginTime;
	}

	public void setLastLoginTime(Long lastLoginTime) {
		this.lastLoginTime = lastLoginTime;
	}

	public UuzcUserDeatil covert() {
		UuzcUserDeatil user = new UuzcUserDeatil();
		user.setEmail(this.secondUID);
		user.setMobile(this.uid);
		user.setPassword(this.password);
		user.setSalt(this.salt);
		user.setUsername(this.name);
		user.setUid(this.dialectUID);
		return user;
	}

	/**
	 * 设置是否是hr账号
	 * 
	 * <pre>
	 * 1. 是
	 * 
	 * @return
	 */
	public Short getHr() {
		return hr;
	}

	public void setHr(Short hr) {
		this.hr = hr;
	}

}
