package com.qunzhixinxi.hnqz.common.security.service;

import lombok.Getter;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.SpringSecurityCoreVersion;
import org.springframework.security.core.userdetails.User;

import java.time.LocalDateTime;
import java.util.Collection;

/**
 * @author hnqz
 * @date 2020/4/16 扩展用户信息
 */
public class HnqzUser extends User {

    private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;

    /**
     * 用户ID
     */
    @Getter
    private Integer id;

    /**
     * 部门ID
     */
    @Getter
    private Integer deptId;

    /**
     * 部门名称
     */
    @Getter
    private String deptName;

    /**
     * 手机号
     */
    @Getter
    private String phone;

    /**
     * 头像
     */
    @Getter
    private String avatar;

    /**
     * 租户ID
     */
    @Getter
    private Integer tenantId;

    /**
     * 租户ID
     */
    @Getter
    private String platId;


    /**
     * 租户ID
     */
    @Getter
    private String drugEntId;

    @Getter
    private Integer[] roles;

    /**
     * 最新更新密码时间
     */
    @Getter
    private LocalDateTime latestChangePwdTime;

	@Getter
	private String realname;


    /**
     * Construct the <code>User</code> with the details required by
     * {@link DaoAuthenticationProvider}.
     *
     * @param id                    用户ID
     * @param deptId                部门ID
     * @param tenantId              租户ID
     * @param username              the username presented to the
     *                              <code>DaoAuthenticationProvider</code>
     * @param password              the password that should be presented to the
     *                              <code>DaoAuthenticationProvider</code>
     * @param enabled               set to <code>true</code> if the user is enabled
     * @param accountNonExpired     set to <code>true</code> if the account has not expired
     * @param credentialsNonExpired set to <code>true</code> if the credentials have not
     *                              expired
     * @param accountNonLocked      set to <code>true</code> if the account is not locked
     * @param authorities           the authorities that should be granted to the caller if they
     *                              presented the correct username and password and the user is enabled. Not null.
     * @throws IllegalArgumentException if a <code>null</code> value was passed either as
     *                                  a parameter or as an element in the <code>GrantedAuthority</code> collection
     */
    public HnqzUser(Integer id, Integer deptId, String phone, String avatar, Integer tenantId, String username,
                    String password, boolean enabled, boolean accountNonExpired, boolean credentialsNonExpired,
                    boolean accountNonLocked, Collection<? extends GrantedAuthority> authorities, String platId,
					String drugEntId, Integer[] roles, LocalDateTime latestChangePwdTime, String realname,
					String deptName) {
        super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
        this.id = id;
        this.deptId = deptId;
        this.deptName = deptName;
        this.phone = phone;
        this.avatar = avatar;
        this.tenantId = tenantId;
		this.latestChangePwdTime = latestChangePwdTime;
        this.platId = platId;
        this.drugEntId = drugEntId;
        this.roles = roles;
		this.realname = realname;
    }

}
