package com.dbnt.kcgfilemanager.model;

import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import javax.persistence.*;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "USER_INFO")
public class UserInfo extends BaseModel implements UserDetails{
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "USER_SEQ")
  private Integer userSeq;
  @Column(name = "USER_ID")
  private String userId;
  @Column(name = "PASSWORD")
  private String password;
  @Column(name = "NAME")
  private String name;
  @Column(name = "POSITION")
  private int position;
  @Column(name = "DEPARTMENT")
  private int department;
  @Column(name = "USER_ROLE")
  private String userRole;
  @Column(name = "CREATE_DATE", updatable = false)
  private LocalDateTime createDate;
  @Column(name = "USER_STATUS")
  private String userStatus;

  @Transient
  private String modifyPassword;
  @Transient
  private String positionName;
  @Transient
  private String departmentName;

  @Override
  public Collection<? extends GrantedAuthority> getAuthorities() {
      Set<GrantedAuthority> roles = new HashSet<>();
      for (String role : userRole.split(",")) {
          roles.add(new SimpleGrantedAuthority(role));
      }
      return roles;
  }

  @Override
  public String getUsername() {
      return userId;
  }

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

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

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

  @Override
  public boolean isEnabled() {
      return userStatus.equals("T");
  }
}
