package com.jiayue.ssi.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.Date;

/**
 * 用户实体
 *
 * @author xsl
 * @version 3.0
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName(value = "sys_user")
public class SysUser extends BaseEntity implements UserDetails {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户账号
     */
    private String username;
    /**
     * 身份证号
     */
    private String idcard;
    /**
     * 用户密码
     */
    private String password;
    /**
     * 用户姓名
     */
    private String nickname;
    /**
     * 账号状态（0正常、1锁定（休眠）、2注销）
     */
    private String status;
    /**
     * 账号在线状态（0在线、1离线）
     */
    private String onlineStatus;
    /**
     * 邮箱
     */
    private String mailbox;
    /**
     * 手机号码
     */
    private String phonenumber;
    /**
     * 失败次数
     */
    private Integer errNum;
    /**
     * 锁定时间
     */
    private Long lockTime;
    /** 最后修改密码时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date lastUpdatePwdTime;
    /** 最后登录IP */
    private String loginIp;

    /** 最后登录时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
    private Date loginDate;

    /**
     * 用户类型（0管理员、1业务用户）
     */
    private String usertype;
    /**
     * 判别页面是否需要刷新数据标识（0正常 1需要刷新），由于审批后，用户页面一直不刷新会导致数据不一致。修改操作和注销操作时用
     */
    private String signstr;

    /**
     * 账号有效期
     */
//    @TableField(value = "exp_date",fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
    private Date expDate;

    /**
     * 检测密码
     */
    private String checkPassword;

    /**
     * 备份密码，用于保护性恢复
     */
    private String bakPassword;

    @Override
    public boolean isEnabled() {
        return true;
    }
    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    @Override
    public String getPassword() {
        return password;
    }


}
